Documentation index for AI agents

GS2-Script 유틸리티 메서드

GS2-Script에서 실행하는 Lua 스크립트 내에서 사용할 수 있는 유틸리티 메서드에 대한 설명

GS2-Script의 확장 스크립트(Lua 언어)에서 사용할 수 있는 확장 메서드입니다.

GS2-Script 샌드박스 내에서 사용할 수 있는 Lua 표준 라이브러리에는 제한이 있습니다. load / require / dofile / pcall과 같이 외부 리소스를 불러오거나 오류를 내부에서 처리하는 함수는 사용할 수 없습니다. os 라이브러리도 안전을 위해 os.time()만 이용할 수 있습니다. table / string / math 라이브러리는 대체로 그대로 이용할 수 있습니다.

util.table_to_json

Lua의 테이블 타입(배열)을 JSON 형식의 문자열로 변환합니다.

Request

인자명타입설명
tabletableLua 테이블

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resultstring변환 결과 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

인자명타입설명
jsonTextstringJSON 형식의 문자열
disableNumberStringToNumberboolJSON 내에 문자열 타입으로 숫자가 저장되어 있을 때 숫자 타입으로 변환하지 않음(default: false)

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resulttable변환 결과 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

인자명타입설명
valuestring원본 문자열
sepstring구분자, 구분 문자열

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resulttable분할된 문자열의 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

인자명타입설명
urlstring접속 대상 URL

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resultstringHTTP 응답 본문

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

인자명타입설명
urlstring접속 대상 URL
contentTypestringHTTP 헤더의 Content-Type
bodystringHTTP 요청 메시지의 본문

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resultstringHTTP 응답 본문

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

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resultfloat생성한 난수

Sample

Code

result = util.random()
if result.isError then
  fail(result['statusCode'], result['errorMessage'])
end
random_value = result["result"]

util.uuid

UUIDv4 기반 문자열을 생성합니다

Request

인자명타입설명

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resultfloat생성한 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

인자명타입설명
categoryint난수열을 구분하기 위한 카테고리 번호

Result

멤버명타입설명
isErrorbool오류 여부
statusCodeint상태 코드
errorMessagestring오류 메시지
resultfloat생성한 난수

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

인자명타입설명
errorCodestring반환할 오류 코드 (BadRequest / Unauthorized / NotFound / Conflict / ServiceUnavailable / BadGateway 등. HTTP 상태 코드(400 / 401 등)도 지정 가능)
messagestring오류 메시지

errorCode에 해당하지 않는 값을 지정한 경우 InternalServerError로 처리됩니다.

Sample

if not_allowed then
  fail("BadRequest", "validation.error.notAllowed")
end

print

로그에 임의의 문자열을 출력합니다. GS2-Log를 활성화한 경우, 출력한 내용을 액세스 로그에서 확인할 수 있습니다. 스크립트 내 디버깅이나 실행 경로 기록에 이용하십시오.

Request

인자명타입설명
messagestring출력할 메시지

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 레퍼런스를 참조하십시오.