# 이 저장소에서 propertyName() 을 선언하는 자리를 세면 : 3 WebSocketAdvancedCapability.java:75 VirtualThreadProfile.java:75 WebAdvancedFeature.java:60 # 그 셋의 구현 WebAdvancedFeature.java:59-62 /** The property that turns this on. */ public String propertyName() { return "backend.web.advanced." + name().toLowerCase(Locale.ROOT).replace('_', '-') + ".enabled"; } WebSocketAdvancedCapability.java:74-79 /** The property that enables this capability. */ public String propertyName() { return "backend.websocket.advanced." + name().toLowerCase(Locale.ROOT).replace('_', '-') + ".enabled"; } VirtualThreadProfile.java:74-77 /** The property that turns this on. */ public static String propertyName() { return "backend.web.advanced.virtual-threads.enabled"; } # 그 셋을 부르는 자리. 메서드 참조까지 센다 WebAdvancedFeature : WebAdvancedReleaseTest.java:48 WebAdvancedReleaseTest.java:52 (끝) WebSocketAdvancedCapability : ResumeTokenTest.java:187 ResumeTokenTest.java:191 (끝) VirtualThreadProfile : (끝) # 발행된 이름 그대로 저장소에 나오는 자리 (git 추적 파일 전부) VirtualThreadProfile.java:76 return "backend.web.advanced.virtual-threads.enabled"; # 그 접두사만으로 찾으면 한 줄이 더 나온다 docs/web-superpowers-package/docs/superpowers/plans/2026-08-13-web-advanced-capabilities-expansion-plan.md:202: prefix = "backend.web.advanced.virtual-threads", src/adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/virtualthread/VirtualThreadProfile.java:76: return "backend.web.advanced.virtual-threads.enabled"; 그 계획 문서가 접두사 다음 줄에 적은 것 : name = "enabled", # 운영자용 문서가 쓰는 이름 web/advanced-capabilities.md:8 backend.web.advanced.mvc-virtual-threads.enabled web/virtual-thread-profile.md:25 mvc-virtual-threads: # 같은 능력을 실제로 바인딩하고 게이트하는 이름 VirtualThreadSettings:17:@ConfigurationProperties(prefix = "backend.web.advanced.mvc-virtual-threads") VirtualThreadMvcConfiguration @EnableConfigurationProperties(VirtualThreadSettings.class) VirtualThreadMvcConfiguration @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) VirtualThreadMvcConfiguration @ConditionalOnProperty( VirtualThreadMvcConfiguration prefix = "backend.web.advanced.mvc-virtual-threads", VirtualThreadMvcConfiguration name = "enabled", VirtualThreadMvcConfiguration havingValue = "true") VirtualThreadMvcConfiguration public class VirtualThreadMvcConfiguration { # 게이트와 무관하게 이 설정을 등록하는 출하 조립 루트 CaSkeletonApplication:58:@ConfigurationPropertiesScan( CaSkeletonApplication:72: "dev.caskeleton.adapter.inbound.web", 그 애너테이션이 거는 목록 : 58-80 · 20 개 패키지 # 이름을 잘못 발행하는 타입 자체는 배선되어 있다 VirtualThreadSettings:77: public VirtualThreadProfile toProfile() { VirtualThreadSettings:91: toProfile(); VirtualThreadMvcConfiguration @Bean VirtualThreadMvcConfiguration public VirtualThreadProfile virtualThreadProfile(VirtualThreadSettings properties) { VirtualThreadMvcConfiguration return properties.toProfile(); VirtualThreadMvcConfiguration } # 루트가 거는 그 패키지 아래의 @ConfigurationProperties 타입 : 8 그중 값을 요구하는 하나. SecuritySettings.java:31-34 : if (this.authMode == AuthenticationMode.JWT && (issuerUri == null || issuerUri.isBlank())) { throw new IllegalArgumentException( "APP_SECURITY_JWT_ISSUER (ca-skeleton.security.issuer-uri) is required"); } # 이 리프는 설정 메타데이터를 생성하도록 선언되어 있다 build.gradle:16: annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' 그 선언을 리프마다 강제하는 루트 빌드 자리 : configure(subprojects.findAll { it.childProjects.isEmpty() }) { tasks.named('check') { dependsOn verifyConfigurationPropertiesProcessor } }