# 두 팩토리가 만드는 값 /** 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() {