Documentation index for AI agents

GS2-Schedule 트랜잭션 액션

검증/소비/입수 각 트랜잭션 액션의 사양

액션의 조합과 동시 실행

모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Schedule 고유의 내용입니다.

GS2-Schedule의 트랜잭션 액션은 네임스페이스·사용자·트리거 이름의 조합으로 결정되는 하나의 트리거를 대상으로 합니다. 트리거는 업데이트할 때마다 전체가 다시 쓰입니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
트리거를 당기기
TriggerByUserId
1건으로 통합된다실패한다네임스페이스·사용자·트리거 이름
트리거의 연장
ExtendTriggerByUserId
통합되어 초 수가 합산된다실패한다네임스페이스·사용자·트리거 이름
트리거의 삭제
DeleteTriggerByUserId
1건으로 통합된다실패한다네임스페이스·사용자·트리거 이름
트리거의 검증
VerifyTriggerByUserId
먼저 지정한 쪽이 남음읽기만 하므로 충돌하지 않는다트리거·검증 타입·경과 시간
이벤트의 검증
VerifyEventByUserId
먼저 지정한 쪽이 남음읽기만 하므로 충돌하지 않는다이벤트·검증 타입·사용자

당기기·연장하기·삭제하기는 세 개의 다른 행이며 경계가 같습니다. 이 중 두 개를 하나의 트리거에 대해 지정하면 충돌합니다. 트리거를 당긴 뒤 연장하고 싶다는 요구는 흔하지만, 여기에는 트랜잭션이 두 개 필요합니다. 연장은 트랜잭션 시작 시점의 상태에서 움직이므로, 같은 트랜잭션이 당긴 트리거가 보이지 않기 때문입니다.

검증 액션은 트랜잭션 시작 시점의 상태를 봅니다. 같은 트랜잭션에서 당긴 트리거나 삭제한 트리거를 검증할 수는 없습니다.

이벤트가 개최 중인지는 시간 오프셋에 의존하고 오프셋은 사용자별이므로, 이벤트의 검증은 사용자별로 다른 대상이 됩니다.

중첩된 트랜잭션에 주의

트리거는 전체가 다시 쓰이므로, 안쪽에서 당겨진 트리거와 바깥쪽에서 연장 또는 삭제된 같은 트리거가 충돌하여 트랜잭션이 실패합니다.

제한을 회피하고 싶은 경우

트리거를 당기기·연장하기는 획득 액션, 삭제는 소비 액션입니다. 당기기와 연장의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 삭제와의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.

동시 실행과 재시도

트리거는 리비전 대조를 수반하여 전체가 다시 쓰이므로, 같은 트리거를 여러 요청이 동시에 업데이트하면 나중에 확정된 쪽이 충돌(409)이 됩니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.

트리거 이름이 다르면 다른 대상이므로, 다른 트리거에 대한 요청끼리는 충돌하지 않습니다.


Verify Action

검증 액션

Gs2Schedule:VerifyTriggerByUserId

사용자 ID를 지정하여 트리거가 당겨진 후 경과 시간 검증

지정한 사용자의 트리거 상태에 관한 조건을 검증합니다. verifyType은 ’notTriggerd’, ’elapsed’, ’notElapsed’를 설정할 수 있습니다. 검증 조건이 충족되지 않으면 오류를 반환합니다.

수량 지정 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
triggerNamestring
~ 128자트리거 이름
트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
verifyType문자열 열거형
enum {
  “notTriggerd”,
  “elapsed”,
  “notElapsed”
}
검증 종류
정의설명
notTriggerd트리거가 당겨지지 않음
elapsed지정한 시간이 경과함
notElapsed지정한 시간이 경과하지 않음
elapsedMinutesint{verifyType} in [“elapsed”, “notElapsed”]
✓※
0 ~ 2147483646경과 시간(분)
※ verifyType이(가) “elapsed”,“notElapsed"이면 필수
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "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’ 을 설정할 수 있습니다. 검증 조건이 충족되지 않으면 오류가 반환됩니다.

수량 지정 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
eventNamestring
~ 128자이벤트 이름
이벤트 고유의 이름. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다.
verifyType문자열 열거형
enum {
  “inSchedule”,
  “notInSchedule”
}
검증 종류
정의설명
inSchedule이벤트의 개최 기간임
notInSchedule이벤트의 개최 기간이 아님
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "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를 지정하여 트리거 삭제

지정한 사용자의 지정된 트리거를 삭제합니다. 트리거를 삭제하면 관련된 상대 스케줄 이벤트가 비활성화됩니다.

수량 지정 가능한 액션: 아니오

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
triggerNamestring
~ 128자트리거 이름
트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "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’는 지정한 이벤트의 스케줄에 유효기간을 맞춥니다. 트리거를 당기면 관련된 상대 스케줄 이벤트가 활성화됩니다.

수량 지정 가능한 액션: 아니오

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
triggerNamestring
~ 128자트리거 이름
트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
triggerStrategy문자열 열거형
enum {
  “renew”,
  “extend”,
  “drop”,
  “repeatCycleEnd”,
  “repeatCycleNextStart”,
  “absoluteEnd”
}
트리거 실행 정책
정의설명
renew이미 트리거가 당겨진 경우 새로운 기간으로 다시 당기기
extend이미 트리거가 당겨진 경우 기간 연장
drop이미 트리거가 당겨진 경우 무시
repeatCycleEnd지정한 이벤트의 반복 기간 종료 일시에 유효 기간이 만료되도록 트리거 당기기
repeatCycleNextStart지정한 이벤트의 반복에서 다음 반복 시작 일시에 유효 기간이 만료되도록 트리거 당기기
absoluteEnd지정한 이벤트의 종료 일시에 유효 기간이 만료되도록 트리거 당기기
ttlint{triggerStrategy} in [“renew”, “extend”, “drop”]
✓※
0 ~ 2147483646트리거 유효기간(초)
※ triggerStrategy이(가) “renew”,“extend”,“drop"이면 필수
eventIdstring{triggerStrategy} in [“repeatCycleEnd”, “repeatCycleNextStart”, “absoluteEnd”]
✓※
~ 1024자이벤트 GRN
※ triggerStrategy이(가) “repeatCycleEnd”,“repeatCycleNextStart”,“absoluteEnd"이면 필수
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "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로 하는 새로운 트리거가 생성됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
triggerNamestring
~ 128자트리거 이름
트리거 고유 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
extendSecondsint
0 ~ 2147483646트리거를 연장하는 기간(초)
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "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]타임 오프셋 토큰",
})