본문 바로가기
WIKI 기술 지식 베이스

Traefik Buffering 미들웨어

원문 보기 위키 갱신

출처: Traefik Buffering 미들웨어 (Buffering Documentation)

본문

Buffering

buffering 미들웨어는 서비스로 전달될 수 있는 요청의 크기를 제한해요.

버퍼링을 사용하면 Traefik이 전체 요청을 메모리로 읽어 들이고 (큰 요청은 디스크로 버퍼링할 수도 있어요), 지정된 크기 제한을 초과하는 요청은 거부해요.

이렇게 하면 서비스가 대량의 데이터(예: multipart/form-data)를 처리하지 않아도 되고, 서비스로 데이터를 보내는 데 걸리는 시간도 최소화할 수 있어요.

정보

미들웨어가 부착되면 Traefik은 요청 본문을 전달하기 전에 버퍼링해요. 그 결과 Traefik은 원래 chunked 본문을 스트리밍하는 대신 고정된 Content-Length로 요청을 업스트림에 보낼 수 있어요.

설정 예시

구조화 (YAML)

# 최대 요청 본문을 2MB로 설정
http:
  middlewares:
    limit:
      buffering:
        maxRequestBodyBytes: 2000000

구조화 (TOML)

# 최대 요청 본문을 2MB로 설정
[http.middlewares]
  [http.middlewares.limit.buffering]
    maxRequestBodyBytes = 2000000

Labels

# 최대 요청 본문을 2MB로 설정
labels:
  - "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"

Tags

// 최대 요청 본문을 2MB로 설정
{
  // ...
  "Tags": [
    "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
  ]
}

Kubernetes

# 최대 요청 본문을 2MB로 설정
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    maxRequestBodyBytes: 2000000

설정 옵션

| 필드 | 설명 | 기본값 | 필수 | | maxRequestBodyBytes | 요청의 최대 허용 본문 크기(바이트)예요. 요청이 허용 크기를 초과하면 Service로 전달되지 않고, 클라이언트는 413 (Request Entity Too Large) 응답을 받아요. 0은 무제한을 의미해요. | 0 | 아니요 | | memRequestBodyBytes | 요청이 메모리 대신 디스크에 버퍼링되는 임계값(바이트)이에요. | 1048576 | 아니요 | | maxResponseBodyBytes | Service로부터의 최대 허용 응답 크기(바이트)예요. 응답이 허용 크기를 초과하면 클라이언트로 전달되지 않아요. 대신 클라이언트는 500 (Internal Server Error) 응답을 받아요. 0은 무제한을 의미해요. | 0 | 아니요 | | memResponseBodyBytes | 응답이 메모리 대신 디스크에 버퍼링되는 임계값(바이트)이에요. | 1048576 | 아니요 | | retryExpression | retryExpression을 사용해 요청을 재요청해요. 자세한 내용은 여기. | "" | 아니요 |

retryExpression

재시도 표현식은 아래 함수들을 연산자 AND(&&)와 OR(||)로 논리적으로 조합해 정의돼요. 최소 하나의 함수가 필요해요:

  • Attempts() 시도 횟수 (첫 번째 시도도 포함돼요).

  • ResponseCode() Service의 응답 코드.

  • IsNetworkError() 응답 코드가 네트워크 오류와 관련된 것인지 여부.

더 알아보기 (Learn more)