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

풀 세트

원문 보기 위키 갱신

풀 세트 (Pool sets)

이 문서는 API를 통해 위치별 풀, 스티어링 정책, 가중치, 폴백 동작을 정의할 수 있게 해 주는 풀 세트(pool sets)에 대해 안내해요.

출처: 문서

본문

풀 세트를 사용하면 지리적 스티어링을 다른 트래픽 스티어링 정책과 결합할 수 있어요. 예를 들어 특정 지역이나 국가 안에서 Dynamic Latency(동적 대기 시간) 스티어링을 적용할 수 있죠. API로 관리하는 로드 밸런서의 경우, 풀 세트가 Geo 스티어링을 대체할 수 있어요.

풀 세트로 할 수 있는 것들:

  • 하나의 위치 안에서 지원되는 모든 스티어링 정책을 적용
  • 해당 위치에만 적용되는 풀 가중치 설정
  • 전역 폴백 풀 대신 해당 위치에 대한 폴백 풀 지정
  • 일치하는 프록시(proxied) 트래픽에 대해 고정 HTTP 응답 반환

참고

대시보드에서 관리하는 단순한 지리적 장애 조치에는 Geo 스티어링을 사용해요. Geo 스티어링은 각 위치의 풀을 장애 조치 순서로 평가하고 하나의 전역 폴백 풀을 사용해요. 위치 내에서 풀 간에 트래픽을 나눌 수는 없어요.

풀 세트가 평가되는 방식

풀 세트는 로드 밸런서에 정렬된 배열로 저장돼요. Cloudflare는 배열 순서대로 이를 평가하며, match가 성공하는 첫 번째 풀 세트에서 멈춰요. 그 풀 세트가 해당 요청에 대한 풀, 스티어링 정책, 가중치, 폴백 풀을 제공해요.

단일 데이터 센터와 일치하는 풀 세트가 지역과 일치하는 것보다 자동으로 우선하지는 않아요. 배열을 가장 구체적인 것부터 가장 덜 구체적인 것 순으로 정렬하세요.

match.default를 true로 설정해 기본 풀 세트를 마지막에 배치해요. default 매치는 모든 요청에 적용돼요. 풀 세트는 첫 매치 승리(first-match wins) 방식을 사용하므로, 이 풀 세트가 이전 풀 세트와 일치하지 않은 요청을 처리해요:

{
	"pool_sets": [
		{
			"name": "sjc-only",
			"match": { "topology": { "pops": ["SJC"] } },
			"overrides": { "pools": ["17b5962d775c646f3f9725cbc7a53df4"] }
		},
		{
			"name": "default",
			"match": { "default": true },
			"overrides": { "pools": ["ff02c959d17f7bb2b1184a202e3c0af7"] }
		}
	]
}

disabled가 true로 설정된 풀 세트는 건너뛰어져요.

매치 조건 (Match conditions)

match 객체는 풀 세트가 어떤 요청에 적용되는지 결정해요. default 또는 topology 중 하나를 설정하며 둘은 결합할 수 없어요. match가 전혀 없는 풀 세트는 모든 요청에 적용돼요.

Field Description
default true일 때 모든 요청과 일치해요. topology와 결합할 수 없어요.
topology 위치로 일치해요. pops, countries, regions 중 최소 하나가 필요해요.

토폴로지 매칭

topology 안에서 각 필드는 위치 코드 목록을 받아요:

Field Values
pops 요청을 처리하는 데이터 센터와 대조되는 Cloudflare 데이터 센터 코드
countries ISO 3166-1 alpha-2 국가 코드
regions WNAM 같은 Cloudflare 지역 코드

하나의 필드 안의 항목들은 OR로 결합돼요. 독일의 요청은 "countries": ["FR", "DE", "GB"]와 일치해요.

주의

필드는 NOT이 아닌 AND로 결합돼요. "countries": ["US"]와 "regions": ["WNAM"]을 모두 설정한 topology는 미국에 있고 그리고 WNAM 지역에 있는 요청만 일치해요. 두 위치 중 하나와 일치시키려면 별도의 풀 세트 두 개를 사용하세요.

예를 들어, 이 토폴로지는 세 필드 모두에 여러 값을 설정해요:

{
	"match": {
		"topology": {
			"pops": ["SJC", "IAD"],
			"countries": ["US", "CA"],
			"regions": ["WNAM", "ENAM"]
		}
	}
}

요청의 데이터 센터가 SJC 또는 IAD이고, 국가가 US 또는 CA이며, 그리고 지역 계층에 WNAM 또는 ENAM이 포함될 때 일치해요.

특별히 그 AND 동작을 원하지 않는다면 topology당 필드를 하나만 설정하세요.

regions 항목은 요청의 지역 계층 어디에든 나타나면 일치하므로, 더 넓은 지역 코드가 더 좁은 지역의 요청과 일치할 수 있어요.

국가 매칭은 요청에 대해 해석된 위치를 사용해요. 클라이언트 위치를 해석할 수 없으면, 국가 매칭은 요청을 처리하는 Cloudflare 데이터 센터의 국가로 대체돼요.

오버라이드 (Overrides)

overrides 객체는 매치 시 적용되는 라우팅 동작을 담아요. 필드는 선택적이지만, fixed_response가 없는 풀 세트는 overrides.pools를 설정해야 해요.

Field Description
pools 라우팅할 풀 ID. 이 요청에 대해 로드 밸런서의 풀 선택을 완전히 대체해요.
pool_weights 이 풀 세트 안에서만 적용되는 풀별 가중치
pool_default_weight pool_weights에 항목이 없는 pools의 풀에 대한 가중치
fallback_pool 이 풀 세트의 마지막 수단 풀. 생략하면 로드 밸런서의 폴백 풀이 사용돼요.
steering_policy pools에 적용되는 스티어링 정책

pools는 위치를 풀로 매핑한 맵이 아니라 단순한 목록이에요. 일치한 풀 세트가 요청에 대한 전체 후보 풀 집합을 정의해요.

풀 세트 내 스티어링 정책

풀 세트 안에서 지원되는 스티어링 정책:

Policy Behavior within the pool set
off 장애 조치 순서로 pools 사용
random pool_weights를 존중하며 풀을 무작위로 선택
dynamic_latency 가장 낮은 왕복 시간(RTT)을 가진 풀 선택
proximity 위도와 경도로 요청에 가장 가까운 풀 선택
least_outstanding_requests 가중치와 미처리 요청 수로 풀 선택
least_connections 가중치와 열린 연결 수로 풀 선택

pool_weights와 pool_default_weight는 random, least_outstanding_requests, least_connections에 적용돼요. 이 가중치는 로드 밸런서의 random_steering 가중치와는 별개이므로, 각 풀 세트는 풀에 독립적으로 가중치를 부여할 수 있어요.

steering_policy를 생략하면 풀 세트는 장애 조치 순서를 사용해요.

고정 응답 (Fixed responses)

프록시된 존 로드 밸런서의 경우, 풀 세트는 overrides.pools 대신 fixed_response를 반환할 수 있어요. 이 옵션을 사용하면 일치한 위치에 대해 HTTP 상태나 리다이렉트를 반환할 수 있어요:

{
	"pool_sets": [
		{
			"name": "redirect-region",
			"match": { "topology": { "countries": ["US"] } },
			"fixed_response": {
				"status_code": 302,
				"location": "https://example.com/service-unavailable"
			}
		}
	]
}

DNS 전용 로드 밸런서에는 fixed_response를 사용하지 마세요. DNS 응답은 HTTP 상태, 본문, 리다이렉트 필드를 전달할 수 없어요. 일치하는 고정 응답은 레코드 없이 NOERROR를 반환해요.

풀 세트는 overrides.pools 또는 fixed_response 중 하나를 반드시 지정해야 해요. 둘 다 없으면 거부되는데, 트래픽과 일치한 후 보낼 곳이 없기 때문이에요.

다른 스티어링 설정과의 관계

풀 세트는 표준 스티어링 필드와 독립적이에요. 풀 세트를 추가해도 default_pools, region_pools, country_pools, pop_pools, steering_policy, random_steering, fallback_pool을 읽거나 쓰지 않으며, 그 필드들을 구성한다고 풀 세트가 만들어지지도 않아요.

일치한 풀 세트가 요청에 대한 풀 선택을 대체하므로, 표준 필드는 풀 세트가 일치하는 요청에는 영향을 주지 않아요. 어떤 풀 세트와도 일치하지 않는 요청은 표준 스티어링 구성으로 넘어가요.

default_pools는 모든 요청이 풀 세트와 일치할 것으로 기대하더라도 모든 로드 밸런서에서 여전히 필수예요. 어떤 풀 세트와도 일치하지 않는 요청의 목적지가 되기 때문이에요.

사용자 정의 규칙 (Custom rules)

풀 세트는 사용자 정의 규칙보다 먼저 평가돼요. 일치한 풀 세트가 라우팅 결정을 세우고, 사용자 정의 규칙이 그 위에 오버라이드를 적용해요.

fixed_response를 반환하는 풀 세트는 완전한 응답이므로, 그 요청에 대해서는 사용자 정의 규칙이 평가되지 않아요.

DNS 전용 로드 밸런서

국가 매칭은 최상위 스티어링 정책과 location_strategy에 의존해요. 전략이 구성되면 Geo와 Proximity 스티어링은 EDNS Client Subnet(ECS), 리졸버 IP 주소, 또는 응답하는 Cloudflare 데이터 센터를 사용할 수 있어요. 전략이 없으면 Proximity는 가능할 때 ECS를 사용하고, Geo는 응답하는 데이터 센터를 사용해요. 다른 최상위 정책은 응답하는 데이터 센터를 사용해요.

풀 세트는 매치를 평가한 후 overrides.steering_policy를 적용해요. 따라서 오버라이드는 국가 매칭에 사용되는 위치를 바꿀 수 없어요. 자세한 내용은 EDNS Client Subnet(ECS) 지원을 참고해요.

제한 (Limits)

풀 세트에는 다음 제한이 적용돼요:

Limit Value
로드 밸런서당 풀 세트 1,000
name의 문자 수 200
pops, countries, regions 목록당 항목 수 1,000

하나의 pops, countries, regions 목록 안의 중복 항목은 거부돼요.

주의

풀 세트가 참조하는 풀은 모든 풀 세트에서 이를 제거할 때까지 삭제할 수 없어요. 이는 overrides.pools, overrides.pool_weights, overrides.fallback_pool의 풀에 적용돼요.

API로 풀 세트 구성하기

풀 세트는 Update Load Balancer 엔드포인트의 pool_sets 필드를 통해 관리돼요. PATCH 요청을 보낼 때:

  • pool_sets를 생략하면 기존 풀 세트가 변경되지 않아요
  • "pool_sets": []를 보내면 모든 풀 세트가 제거돼요
  • "pool_sets": null을 보내면 아무 변경이 없어요

예시 요청

이 예시를 사용하기 전에 참조된 풀을 만드세요. 각 예시 풀 ID를 계정의 ID로 바꾸세요.

이 요청은 북아메리카 서부 트래픽을 가중치에 따라 두 풀로 나누고 지역 폴백 풀을 사용해요. 독일 트래픽에는 가장 낮은 대기 시간 풀을 선택해요. 기본 풀 세트가 나머지 모든 트래픽을 처리해요. 로드 밸런서는 별도의 전역 폴백 풀을 사용해요.

다음 본문으로 /zones/{zone_id}/load_balancers/{load_balancer_id}에 PATCH 요청을 보내세요:

Requestjson

{
	"fallback_pool": "6f1ed002ab5595859014ebf0951522d9",
	"pool_sets": [
		{
			"name": "wnam-active-active",
			"match": { "topology": { "regions": ["WNAM"] } },
			"overrides": {
				"pools": [
					"17b5962d775c646f3f9725cbc7a53df4",
					"9290f38c5d07c2e2f4df57b1f61d4196"
				],
				"pool_weights": {
					"17b5962d775c646f3f9725cbc7a53df4": 0.5,
					"9290f38c5d07c2e2f4df57b1f61d4196": 0.5
				},
				"steering_policy": "random",
				"fallback_pool": "2a28d35d1c00f000540fe739a04b3230"
			}
		},
		{
			"name": "de-lowest-latency",
			"match": { "topology": { "countries": ["DE"] } },
			"overrides": {
				"pools": [
					"0930eec54a4c7ae6616985b79f678210",
					"c8b4f5a6d7e84910a2b3c4d5e6f70819"
				],
				"steering_policy": "dynamic_latency"
			}
		},
		{
			"name": "default",
			"match": { "default": true },
			"overrides": {
				"pools": ["ff02c959d17f7bb2b1184a202e3c0af7"],
				"steering_policy": "off"
			}
		}
	]
}

결과 동작

요청이 완료된 후 로드 밸런서는 이 구성으로 트래픽을 라우팅해요:

Order Match Pools Steering policy Fallback pool
1 북아메리카 서부 (WNAM) 17b5962d775c646f3f9725cbc7a53df4, 9290f38c5d07c2e2f4df57b1f61d4196 Random, 각각 50% 2a28d35d1c00f000540fe739a04b3230
2 독일 (DE) 0930eec54a4c7ae6616985b79f678210, c8b4f5a6d7e84910a2b3c4d5e6f70819 Dynamic Latency Global fallback
3 나머지 모든 트래픽 ff02c959d17f7bb2b1184a202e3c0af7 장애 조치 순서 Global fallback

전역 폴백 풀은 6f1ed002ab5595859014ebf0951522d9예요.

검증 오류 (Validation errors)

잘못된 풀 세트 구성은 HTTP 상태 400과 API 오류 코드 1002를 반환해요. 오류 메시지는 문제를 설명하며 다음 식별자 중 하나를 포함할 수 있어요:

Message identifier Cause
POOL_SETS_TOO_LARGE 하나의 로드 밸런서에 풀 세트가 1,000개 넘음
POOL_SET_NO_INTENT 풀 세트가 overrides.pools도 fixed_response도 지정하지 않음
POOL_SET_DEFAULT_WITH_MATCH match가 default와 topology를 결합함
POOL_SET_EMPTY_TOPOLOGY topology가 pops, countries, regions 중 어느 것도 설정하지 않음
POOL_SET_TOPOLOGY_TOO_LARGE topology 목록이 1,000개 항목을 초과함
POOL_SET_POP_ENTITLEMENT 계정이 데이터 센터 스티어링 자격이 없음
POOL_SET_REGION_ENTITLEMENT 계정이 지역 스티어링 자격이 없음
POOL_SET_COUNTRY_ENTITLEMENT 계정이 국가 스티어링 자격이 없음

더 알아보기 (Learn more)

풀 세트는 위치별로 세밀한 스티어링 정책·가중치·폴백을 구성할 수 있게 해 줘요. API 기반 고급 라우팅이 필요할 때 Geo 스티어링 대신 사용하면 돼요.