

AWS Mainframe Modernization Service(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization Service(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization Service(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경을](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html) 참조하세요.

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

# 메인프레임 런타임의 AWS 변환에 대한 속도 제한 구성
<a name="ba-runtime-rate-limiting"></a>

AWS 메인프레임 런타임을 위한 변환에는 과도한 요청 및 잠재적 남용으로부터 gapwalk 애플리케이션을 보호하는 기본 제공 속도 제한 기능이 포함되어 있습니다. 속도 제한 시스템은 토큰 버킷 알고리즘을 사용하여 버스트 용량과 지속적인 속도 제한을 모두 제공합니다.

**Topics**
+ [속도 제한 개요](#ba-runtime-rate-limiting-overview)
+ [구성 속성](#ba-runtime-rate-limiting-config)
+ [속도 제한 활성화](#ba-runtime-rate-limiting-enable)
+ [클라이언트 식별](#ba-runtime-rate-limiting-client-id)
+ [속도 제한 헤더](#ba-runtime-rate-limiting-headers)
+ [메모리 관리](#ba-runtime-rate-limiting-memory)

## 속도 제한 개요
<a name="ba-runtime-rate-limiting-overview"></a>

속도 제한 시스템은 다음과 같은 기능을 제공합니다.

**토큰 버킷 알고리즘**  
+ 구성된 버스트 용량까지의 버스트 트래픽 허용
+ 분당 요청에 따라 일정한 속도로 토큰을 다시 채웁니다.
+ 합법적인 트래픽 급증을 차단하지 않고 원활한 속도 제한 제공

**클라이언트 식별**  
+ 프록시 지원을 통해 IP 주소로 클라이언트 식별
+ X-Forwarded-For 및 X-Real-IP 헤더 지원
+ 로드 밸런서 및 역방향 프록시 시나리오 처리

**자동 메모리 관리**  
+ 만료된 속도 제한 버킷을 자동으로 정리합니다.
+ 구성 가능한 정리 간격 및 만료 시간
+ 장기 실행 애플리케이션에서 메모리 누수 방지

**HTTP 통합**  
+ 한도를 초과하면 HTTP 429(요청이 너무 많음)를 반환합니다.
+ 응답에 표준 속도 제한 헤더 포함
+ 클라이언트에 대한 재시도 후 정보 제공

## 구성 속성
<a name="ba-runtime-rate-limiting-config"></a>

`application-main.yaml` 파일에서 속도 제한을 구성합니다.

```
gapwalk:
  ratelimiting:
    enabled: true                                        # Enable/disable rate limiting
    requestsPerMinute: 1000                              # Sustained rate limit per minute
    burstCapacity: 1500                                  # Maximum burst requests allowed
    includeHeaders: true                                 # Include X-RateLimit-* headers
    cleanupIntervalMinutes: 5                            # Cleanup interval for expired buckets
    bucketExpiryHours: 1                                 # Hours after which unused buckets expire
    errorMessage: "Too many requests. Try again later."  # Custom error message
    whitelistIps: ""                                     # Comma-separated IPs to bypass limiting
    perEndpointLimiting: false                           # Apply limits per endpoint (not implemented)
```

### 속성 설명
<a name="ba-runtime-rate-limiting-config-properties"></a>

**enabled**  
속도 제한 기능을 활성화 또는 비활성화하는 마스터 스위치입니다. 기본값: `false`

**requestsPerMinute**  
지속적인 속도 제한을 위해 분당 허용되는 요청 수입니다. 토큰 리필 속도를 나타냅니다. 기본값: `1000`

**burstCapacity**  
속도 제한이 적용되기 전에 버스트에 허용되는 최대 요청 수입니다. 트래픽 급증을 허용`requestsPerMinute`하려면 보다 높아야 합니다. 기본값: `1500`

**includeHeaders**  
HTTP 응답에 표준 속도 제한 헤더(`X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`)를 포함할지 여부입니다. 기본값: `true`

**cleanupIntervalMinutes**  
만료된 속도 제한 버킷의 자동 정리 간격. 메모리 누수를 방지하는 데 도움이 됩니다. 기본값: `5`

**bucketExpiryHours**  
미사용 비율 제한 버킷이 만료되어 정리할 수 있는 것으로 간주되는 시간입니다. 기본값: `1`

**errorMessage**  
속도 제한을 초과할 때 JSON 응답에 반환되는 사용자 지정 오류 메시지입니다. 기본값: `"Too many requests. Try again later."`

**whitelistIps**  
속도 제한을 완전히 우회하는 IP 주소의 쉼표로 구분된 목록입니다. 상태 확인 또는 신뢰할 수 있는 시스템에 유용합니다. 기본값: `empty`

**perEndpointLimiting**  
클라이언트당 대신 엔드포인트당 별도의 속도 제한을 적용할지 여부입니다. 현재 구현되지 않았습니다. 기본값: `false`

## 속도 제한 활성화
<a name="ba-runtime-rate-limiting-enable"></a>

기본 설정으로 속도 제한을 활성화하려면:

```
gapwalk:
  ratelimiting:
    enabled: true
```

## 클라이언트 식별
<a name="ba-runtime-rate-limiting-client-id"></a>

속도 제한 시스템은 다음 우선 순위에 따라 클라이언트를 식별합니다.

1. **X-Forwarded-For 헤더**(쉼표로 구분된 경우 첫 번째 IP)

1. **X-Real-IP 헤더**

1. HTTP 요청의 **원격 주소** 

이렇게 하면 애플리케이션이 뒤처질 때 적절한 클라이언트 식별이 보장됩니다.
+ 로드 밸런서
+ 역방향 프록시
+ CDNs
+ API 게이트웨이

### 클라이언트 식별 예제
<a name="ba-runtime-rate-limiting-client-id-example"></a>

```
# Direct connection
Client IP: 192.168.1.100

# Behind load balancer with X-Forwarded-For
X-Forwarded-For: 203.0.113.45, 192.168.1.100
Client IP: 203.0.113.45 (first IP used)

# Behind reverse proxy with X-Real-IP
X-Real-IP: 203.0.113.45
Client IP: 203.0.113.45
```

## 속도 제한 헤더
<a name="ba-runtime-rate-limiting-headers"></a>

`includeHeaders`이 활성화되면 HTTP 응답에 다음 헤더가 추가됩니다.

**X-RateLimit-Limit**  
클라이언트의 속도 제한 상한(분당 요청 수)

**X-RateLimit-Remaining**  
현재 속도 제한 창에 남아 있는 요청 수

**X-RateLimit-Reset**  
속도 제한 기간이 재설정되는 시간(Unix 타임스탬프)

### 응답 헤더 예제
<a name="ba-runtime-rate-limiting-headers-example"></a>

```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1640995200
```

### 속도 제한 초과 응답
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

속도 제한을 초과하면 시스템이 다음을 반환합니다.

**HTTP 상태**  
429 요청이 너무 많음

**Content-Type**  
application/json

**이후 재시도**  
재시도하기 전에 대기할 초 수

```
{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 60,
  "timestamp": 1640995140000
}
```

## 메모리 관리
<a name="ba-runtime-rate-limiting-memory"></a>

속도 제한 시스템은 메모리를 자동으로 관리하여 장기 실행 애플리케이션의 누수를 방지합니다.

**자동 정리**  
+ `cleanupIntervalMinutes` 분마다 실행
+ `bucketExpiryHours` 시간 동안 사용되지 않은 버킷을 제거합니다.
+ 모니터링을 위한 정리 활동을 로깅합니다.

**메모리 효율성**  
+ 스레드 안전을 위해 동시 데이터 구조 사용
+ 지연 버킷 생성(필요한 경우에만)
+ 효율적인 토큰 버킷 구현

### 정리 활동 모니터링
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

로그에서 정리 메시지를 확인합니다.

```
INFO  RateLimitingService - Cleaned up 15 expired rate limiting buckets
```