# 두 팩토리가 만드는 값
  /** The platform default policy. */
  public static MongoRegexPolicy standard() {
    return new MongoRegexPolicy(DEFAULT_MAX_LENGTH, Set.of('i'), true);
  }
  /** A policy that forbids regular expressions entirely. */
  public static MongoRegexPolicy forbidden() {
    return new MongoRegexPolicy(1, Set.of(), true);
  }

# validate 의 네 검사
  public void validate(String pattern, String flags) {
    Objects.requireNonNull(pattern, "pattern");
    Objects.requireNonNull(flags, "flags");
    requireWithinLength(pattern);
    for (int index = 0; index < flags.length(); index++) {
      char flag = flags.charAt(index);
      if (!allowedFlags.contains(flag)) {
        throw MongoOperationRejectedException.of(
            "query.regex", "regex flag '" + flag + "' is not allowed by this collection's policy");
      }
    }
    if (requireAnchored && !pattern.startsWith("^")) {
      throw MongoOperationRejectedException.of(
          "query.regex",
          "the pattern is not anchored at the start, so it cannot use an index and will scan the "
              + "collection");
    }
    if (hasNestedQuantifier(pattern)) {
      throw MongoOperationRejectedException.of(
          "query.regex",
          "the pattern nests quantifiers, which can take exponential time to evaluate");
    }

#   길이 검사가 쓰는 비교
  private String requireWithinLength(String pattern) {
    if (pattern.length() > maxLength) {
      throw MongoOperationRejectedException.of(
          "query.regex",
          "the pattern is " + pattern.length() + " characters, above the limit of " + maxLength);

# forbidden() 을 부르는 곳 전수
  (선언 자리 말고는 없음)

# withRegexPolicy 를 부르는 곳 전수
test/java/dev/caskeleton/adapter/outbound/mongo/query/PolicyAwareMongoQueryBuilderTest.java:87:            .withRegexPolicy(MongoRegexPolicy.standard());
main/java/dev/caskeleton/adapter/outbound/mongo/query/MongoQueryPolicy.java:83:  public MongoQueryPolicy withRegexPolicy(MongoRegexPolicy policy) {

# MongoQueryPolicy 를 만드는 곳 전수
test/java/dev/caskeleton/adapter/outbound/mongo/query/PolicyAwareMongoQueryBuilderTest.java:20:      MongoQueryPolicy.allowingFields("status", "createdAt", "_id");
test/java/dev/caskeleton/adapter/outbound/mongo/query/PolicyAwareMongoQueryBuilderTest.java:38:        MongoQueryPolicy.allowing(
test/java/dev/caskeleton/adapter/outbound/mongo/query/PolicyAwareMongoQueryBuilderTest.java:83:        MongoQueryPolicy.allowing(
test/java/dev/caskeleton/adapter/outbound/mongo/query/PolicyAwareMongoQueryBuilderTest.java:110:        MongoQueryPolicy.allowing(
test/java/dev/caskeleton/adapter/outbound/mongo/query/LiteralSearchIsExpressibleTest.java:28:      MongoQueryPolicy.allowing(

# 자동 구성이 query 패키지에서 만드는 빈
307-  @ConditionalOnMissingBean
308:  public MongoBudgetEnforcer mongoBudgetEnforcer() {
