# 프로덕션이 실제로 내는 사유 전수
32:        RetryDisposition.RETRY_FULL_TRANSACTION, delay, "retryable persistence failure");
53:      return RetryDecision.reconcile("transaction completion is unknown");
56:      return RetryDecision.fail("attempt performed an irreversible external side effect");
59:      return RetryDecision.fail("retry is not enabled for this transaction profile");
63:      return RetryDecision.fail("failure was classified as non-retryable");
67:      return RetryDecision.fail("non-retryable persistence failure");
70-        backoff.forAttempt(attempt.number()), "retrying whole transaction for " + category);

# 같은 모듈이 저카디널리티를 이미 정의해 뒀다
 *
 * <p>The check is structural: registered names already match a bounded format, so anything that
 * does not is rejected rather than sanitised. Sanitising would let the caller keep passing
 * unbounded values and never notice.
 */
public final class LowCardinality {

  /** The shape every registered operation, query, and category name already satisfies. */
  private static final Pattern REGISTERED = Pattern.compile("[a-zA-Z][a-zA-Z0-9._-]{0,95}");
  /**
   * Fails when any value is not a registered, bounded identifier.
   *
   * @throws IllegalArgumentException naming the first offending value
   */
  public static void requireRegistered(String... values) {
    for (String value : values) {
      if (value == null || !REGISTERED.matcher(value).matches()) {
        throw new IllegalArgumentException(
            "metric tag value is not a registered low-cardinality identifier");
      }

# 그 사유들을 그 가드에 실제로 넣어 본다
거절     29자  retryable persistence failure
거절     33자  transaction completion is unknown
거절     54자  attempt performed an irreversible external side effect
거절     49자  retry is not enabled for this transaction profile
거절     39자  failure was classified as non-retryable
거절     33자  non-retryable persistence failure
거절     52자  retrying whole transaction for SERIALIZATION_FAILURE

생성자에 100000자를 넣었을 때: 통과, 담긴 길이 100000
