

지원 종료 공지: 2026 AWS 년 5월 20일에에 대한 지원이 종료됩니다 AWS SimSpace Weaver. 2026년 5월 20일 이후에는 SimSpace Weaver 콘솔 또는 SimSpace Weaver 리소스에 더 이상 액세스할 수 없습니다. 자세한 내용은 [AWS SimSpace Weaver 지원 종료를 참조하세요](https://docs.aws.amazon.com/simspaceweaver/latest/userguide/simspaceweaver-end-of-support.html).

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Service Quotas 작업
<a name="working-with_quotas"></a>

이 섹션에서는에 대한 서비스 할당량으로 작업하는 방법을 설명합니다 SimSpace Weaver. **할당량**은 **제한**이라고도 합니다. Service Quotas 목록은 [SimSpace Weaver 엔드포인트 및 할당량](service-quotas.md) 섹션을 참조하세요. 이 섹션의 API는 **앱 API** 세트에서 가져온 것입니다. 앱 API는 서비스 API와 다릅니다. 앱 APIs입니다. SimSpace Weaver 로컬 시스템의 앱 SDK 폴더에서 앱 API에 대한 설명서를 찾을 수 있습니다.

```
sdk-folder\SimSpaceWeaverAppSdk-sdk-version\documentation\index.html
```

**Topics**
+ [앱 제한 확인하기](#working-with_quotas_get-app-limits)
+ [앱에서 사용하는 리소스의 양 가져오기](#working-with_quotas_get-app-resources)
+ [지표 재설정](#working-with_quotas_reset-metrics)
+ [제한 초과됨](#working-with_quotas_exceed-limit)
+ [메모리 부족](#working-with_quotas_out-of-memory)
+ [모범 사례](#working-with_quotas_best-practices)

## 앱 제한 확인하기
<a name="working-with_quotas_get-app-limits"></a>

**RuntimeLimits**앱 API를 사용하여 앱의 제한을 쿼리할 수 있습니다.

```
Result<Limit> RuntimeLimit(Application& app, LimitType type)
```파라미터

**Application 및 앱**  
앱에 대한 참조입니다.

**LimitType 유형**  
다음과 같은 제한 유형을 가진 열거형입니다.  

```
enum LimitType {
    Unset = 0,
    EntitiesPerPartition = 1,
    RemoteEntityTransfers = 2,
    LocalEntityTransfers = 3
};
```

다음 예제에서는 엔터티 수 제한을 쿼리합니다.

```
WEAVERRUNTIME_TRY(auto entity_limit,
    Api::RuntimeLimit(m_app, Api::LimitType::EntitiesPerPartition))
Log::Info("Entity count limit", entity_limit.value);
```

## 앱에서 사용하는 리소스의 양 가져오기
<a name="working-with_quotas_get-app-resources"></a>

**RuntimeMetrics** 앱 API를 호출하여 앱에서 사용하는 리소스의 양을 가져올 수 있습니다.

```
Result<std::reference_wrapper<const AppRuntimeMetrics>> RuntimeMetrics(Application& app) noexcept
```파라미터

**Application 및 앱**  
앱에 대한 참조입니다.

API는 지표가 포함된 struct에 대한 참조를 반환합니다. 카운터 지표에는 실행 중인 총 값이 포함되며 증가만 합니다. 게이지 지표에는 증가 또는 감소할 수 있는 값이 있습니다. 애플리케이션 런타임은 이벤트로 인해 값이 증가할 때마다 카운터를 업데이트합니다. 런타임은 API를 호출할 때만 게이지를 업데이트합니다. SimSpace Weaver 는 참조가 앱 수명 주기 동안 유효하도록 보장합니다. API를 반복해서 호출해도 참조는 변경되지 않습니다.

```
struct AppRuntimeMetrics {
    uint64_t total_committed_ticks_gauge,

    uint32_t active_entity_gauge,
    uint32_t ticks_since_reset_counter,

    uint32_t load_field_counter,
    uint32_t store_field_counter,

    uint32_t created_entity_counter,
    uint32_t deleted_entity_counter,

    uint32_t entered_entity_counter,
    uint32_t exited_entity_counter,

    uint32_t rejected_incoming_transfer_counter,
    uint32_t rejected_outgoing_transfer_counter
}
```

## 지표 재설정
<a name="working-with_quotas_reset-metrics"></a>

**ResetRuntimeMetrics** 앱 API는 `AppRuntimeMetrics` struct의 값을 재설정합니다.

```
Result<void> ResetRuntimeMetrics(Application& app) noexcept
```

다음 예제에서는 앱에서 **ResetRuntimeMetrics**를 호출하는 방법을 보여줍니다.

```
if (ticks_since_last_report > 100)
{
    auto metrics = WEAVERRUNTIME_EXPECT(Api::RuntimeMetrics(m_app));
    Log::Info(metrics);

    ticks_since_last_report = 0;

    WEAVERRUNTIME_EXPECT(Api::ResetRuntimeMetrics(m_app));
}
```

## 제한 초과됨
<a name="working-with_quotas_exceed-limit"></a>

제한을 초과하는 앱 API 직접 호출은 `ErrorCode::CapacityExceeded`를 반환합니다. 단, 엔터티 전송은 예외입니다. SimSpace Weaver 는 **커밋** 및 **BeginUpdate** 앱 API 작업의 일부로 엔터티 전송을 비동기적으로 처리하므로 엔터티 전송 제한 때문에 전송이 실패할 경우 오류를 반환하는 특정 작업은 없습니다. 전송 실패를 감지하기 위해 `rejected_incoming_transfer_counter` 및 `rejected_outgoing_transfer_counter`(`AppRuntimeMetrics` struct)의 현재 값을 이전 값과 비교할 수 있습니다. 거부된 엔터티는 파티션에 포함되지 않지만 앱은 여전히 이를 시뮬레이션할 수 있습니다.

## 메모리 부족
<a name="working-with_quotas_out-of-memory"></a>

SimSpace Weaver 는 가비지 수집기 프로세스를 사용하여 여유 메모리를 정리하고 해제합니다. 가비지 수집기가 메모리를 해제할 수 있는 속도보다 빠르게 데이터를 쓸 수 있습니다. 이 경우 쓰기 작업이 앱의 예약 메모리 제한을 초과할 수 있습니다. SimSpace Weaver 는 `OutOfMemory`(및 추가 세부 정보)가 포함된 메시지와 함께 내부 오류를 반환합니다. 자세한 내용은 [여러 시간에 걸쳐 쓰기 작업 분산](#working-with_quotas_best-practices_spread-writes) 단원을 참조하십시오.

## 모범 사례
<a name="working-with_quotas_best-practices"></a>

다음의 모범 사례는 제한 초과되지 않도록 앱을 설계하기 위한 일반적인 지침입니다. 이는 특정 앱 디자인에는 적용되지 않을 수 있습니다.

### 자주 모니터링하고 속도 줄이기
<a name="working-with_quotas_best-practices_monitor"></a>

지표를 자주 모니터링하여 제한에 가깝게 도달하는 작업의 속도를 늦춰야 합니다.

### 구독 제한 및 전송 제한 초과 방지
<a name="working-with_quotas_best-practices_subscription-and-xfer"></a>

가능한 경우 시뮬레이션을 설계하여 원격 구독 및 엔터티 전송 횟수를 줄입니다. 배치 그룹을 사용하여 동일한 작업자에 여러 파티션을 배치하고 작업자 간에 엔터티를 원격으로 전송해야 하는 필요성을 줄일 수 있습니다.

### 여러 시간에 걸쳐 쓰기 작업 분산
<a name="working-with_quotas_best-practices_spread-writes"></a>

틱의 업데이트 수와 크기는 트랜잭션을 커밋하는 데 필요한 시간과 메모리에 상당한 영향을 미칠 수 있습니다. 메모리 요구 사항이 크면 애플리케이션 런타임에 메모리가 부족해질 수 있습니다. 쓰기를 여러 시간에 걸쳐 분산하여 틱당 평균 총 업데이트 크기를 줄일 수 있습니다. 이를 통해 성능을 개선하고 제한 초과를 방지할 수 있습니다. 각 틱에 평균 12MB 또는 각 엔터티에 1.5KB를 초과하여 쓰지 않는 것이 좋습니다.