GS2-CDK 를 사용한 설정
GS2-CDK 를 사용하여 GS2-Deploy 템플릿을 작성한다
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 용 템플릿을 생성하는 코드를 작성한 예는 다음과 같습니다.
stack := core.NewStack()
inventory.NewNamespace(
&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",
))->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())->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 의 리소스 유지 관리를 모두 프로그래밍 언어상에서 완결할 수 있게 됩니다.