Documentation index for AI agents

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 의 리소스 유지 관리를 모두 프로그래밍 언어상에서 완결할 수 있게 됩니다.