> For the complete documentation index, see [llms.txt](/llms.txt)

# GS2의 기능 확장

GS2 마이크로서비스의 기능 확장 방법




GS2는 다양한 기능을 마이크로서비스로 제공하고 있습니다.
하지만 경우에 따라서는 기능을 확장하고 싶다고 느끼는 상황이 있을 수 있습니다.

GS2-Script는 Lua 언어를 이용한 스크립팅 기능을 제공하여, GS2 마이크로서비스의 기능을 확장할 수 있습니다.
GS2-Script에 작성한 스크립트는 임의의 타이밍에 호출할 수 있는 것이 아니라, GS2의 각 마이크로서비스가 정의하는 트리거에 따라 실행됩니다.

예를 들어, GS2-Account에는 다음과 같은 트리거가 존재합니다.

- 계정 신규 생성
- 인증 실행
- 인계 정보 등록
- 인계 실행

각각 스크립트 실행 타이밍으로 "동기 처리"와 "비동기 처리"를 이용할 수 있습니다.

## 계정 신규 생성 시 실행되는 스크립트 예시

### Request

|           | 타입         | 설명            |
|-----------|-----------|---------------|
| namespace | Namespace | 네임스페이스       |
| account   | Account   | 게임 플레이어 계정 |

### Result

|         | 타입    | 필수  | 기본값  | 값 제한  | 설명             |
|---------|------|-----|--------|-------|----------------|
| permit  | bool | ✓   |        |       | 계정 생성을 허가할지 여부 |

### 구현 예제

```lua
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"의 이용 방법에 대해서는 별도 자료를 참고해 주세요.




- [Amazon Event Bridge 의 이용](/ko/overview/workflow/coding/extend/event_bridge/)
  
