묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨토비의 스프링 부트 - 이해와 원리
테스트에서의 @Transactional 사용에 대해 질문이 있습니다.
안녕하세요 토비 선생님!강의 너무 재밌게 잘 듣고 있습니다. 이제 몇개 남지 않아서 많이 아쉽네요. 다름이 아니라 테스트 코드 작성시 `@Transactional` 어노테이션의 사용에 대해 질문이 있습니다. 저는 롤백테스트 작성을 위해 @Transactional 을 애용해왔는데요,,얼마전 업무를 보다가 이상하게 테스트 코드는 잘만 통과를 하는데 같은 코드가 서버에 띄웠을때는 의도대로 동작을 안하더라고요. 한참을 씨름하다 알고보니 엔티티를 변경하고 JPA 변경감지로 변경하도록 의도한 코드인데 트랜잭션 경계 밖에서 변경을 하고 있었더라고요.이후로는 찾아보니 테스트 코드에서 @Transactional을 사용하지 말라는 이야기가 많아 안쓰려고 노력을 해보는데 테스트 후 전부 롤백시키는게 만만치가 않더라고요. @AfterEach로 리포지터리를 다 불러와서 하나씩 돌려놓는것도 일이고..개인적으로는 @Transactional 대신에 단순히 전체 테스트에 대해 DB 롤백을 해주는 어노테이션이 별개로 있었으면 더 좋지 않았을까 하는 아쉬움도 있더라고요.스프링에서 굳이 서로 다른 용도의 기능을 하나의 어노테이션으로 공유하는 이유가 있을까요? 트랜잭션 경계라는 점에서는 공통점이 있다지만 각각의 기능으로 분리되었어도 되지 않았을까요?AfterEach 넣어서 리포지터리 하나하나 불러와 일일히 초기화 해 주는 대신 @Transactional 만큼 코드가 깔끔해지면서 테스트코드에 @Transactional을 쓰면 생기게 되는 문제를 해결하는 방법이 있을까요? 혹은 사실 알고보면 테스트에 @Transactional을 쓰는게 좋은건데 제가 잘못 오해하고 있었을까요? 요즘 테스트 코드를 작성할때마다 고민이 많았는데 제가 한동안 검색한 결과로는 쉽게 결론을 내기가 힘들었습니다.더 나은 코드작성에 꼭 도움이 필요해서 실례를 무릅쓰고 질문글을 올려봅니다.감사합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
ApplicationContextRunner
ApplicationContextRunner를 사용하는 부분에서assertThat(context).hasSingleBean이랑 asserThat(context).doesNotHaveBean 사용이 안되네요hasSingleBean이랑 doesNotHaveBean이 없어요버전 문제일까요 지금까지 다 잘 따라왔는데 뭔가 문제인지 모르겠네요
-
해결됨토비의 스프링 부트 - 이해와 원리
BeanClassLoaderAware 인터페이스가 궁금하여 질문드립니다.
BeanClassLoaderAware 를 통해 ClassLoader 를 주입을 받는다고 가정할 때public class MyAutoConfigImportSelector implements DeferredImportSelector, BeanClassLoaderAware { private ClassLoader classLoader; @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { List<String> autoConfigs = new ArrayList<>(); ImportCandidates.load(MyAutoConfiguration.class, classLoader) .forEach(autoConfigs::add); return autoConfigs.toArray(new String[0]); } @Override public void setBeanClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } } MyAutoConfigImportSelector 는 스프링에서 사용하는 공유되는 클래스로더에 의해서 로딩되는 것으로 확인하였습니다. (this.getClass().getClassLoader() 로 해도 같은동작)그렇다면 BeanClassLoaderAware 인터페이스를 스프링에서 제공하는 이유는 무엇일까 궁금하여 질문드립니다.또한 BeanClassLoaderAware javadoc 에서 framework classes 가 구현하도록 의도되었다고하는데 framework classes 의 의미는 무엇일까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
출처를 남기며 깃에 좀 올려도 될까요 선생님?!
출처를 남기며 깃에 좀 올려도 될까요 선생님?!
-
해결됨토비의 스프링 부트 - 이해와 원리
프로젝트 설정
2:50 부터 헤매고있는데요..intellij Community 버전을 다운받았고 새로운 프로젝트 설정할때 왼쪽 목록에 Spring Initializr이 보이지않아서 확인해보니 Community 버전인 경우 없다고하더라구요.Community버전이라, 2:50~ 설정하는부분을 진행할 수 없다면 따로 설정해야하는부분이 있을까요?
-
미해결토비의 스프링 부트 - 이해와 원리
@PostConstruct로 테이블을 생성하지 못합니다.
오류 내용을 보니 hello 테이블을 찾을 수 없다고 뜹니다.그래서, @PostContruct가 안 동작하나? 생각해서 프린트로 찍어보게 메인메서드를 돌리면 잘 찍힙니다.그리고 기존 방식처럼 jdbctemplate을 주입해서 @BeforeEach로 생성하는 방식으로는 잘 동작하네요.너무 궁금해서 git 주소를 남겨봅니다 ㅠhttps://github.com/rnwnsgud/helloboot
-
해결됨토비의 스프링 부트 - 이해와 원리
테스트를 의식한 소스 코드 작성에 대한 토비님의 의견이 궁금합니다.
안녕하세요 강의 재밌게 듣고 있습니다 :D이번 강의 중 테스트에 있어 DI의 장점을 제 나름의 언어로 재정의 해보았습니다.의존성을 고립시켜 테스트 목적 객체가 아닌 다른 객체의 영향으로 실패할 수 있는 상황을 차단한다.따라서 DI는 단위 테스트에 대한 신뢰성을 보장한다라고 이해했습니다.그런데 이런 생각을 하던 도중 그렇다면 소스코드가 테스트를 의식한 코드를 작성해야 하는 것 아닌가? 하는 생각도 듭니다.예전에는 이게 싫어서 해당 객체를 상속받은 페이크 객체를 만들어서 테스트 코드에서 의존성을 밀어 넣는 식으로 작성했는데요,다른 의견들도 찾아보니 소스코드의 안정성을 보장하기 위해 테스트에 의존한 코드를 짜야 한다, 테스트는 소스코드를 위해 존재하는데 소스코드가 테스트에 의존하는 건 자연스럽지 않다, 테스트하기 좋은 간단한 코드를 짜면 이러한 걱정할 필요가 없다 등 여러 의견들이 있는 것 같습니다.따라서 이에 토비님 의견도 궁금하고 듣고 싶습니다 ㅎㅎ감사합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
이번 강의 내용을 보고 스프링 컨테이너에 톰캣을 내장했다고 볼 수 있을까요?
안녕하세요 토비님 강의 재밌게 잘 듣고있습니다 :)흔히들 스프링부트는 톰캣을 스프링 애플리케이션 내에 내장 시켰다는 것에서 가장 큰 차이점을 두고 있는 것 같습니다.그렇다면 이번 강의 내용에서 서블릿 컨테이너 초기화 작업을 스프링 컨테이너 초기화 작업에 종속 시켰다는 점에서 위에서 언급한 톰캣을 스프링 컨테이너에 내장 시켰다고 볼 수 있을까요?만약에 제가 질문한 내용이 맞다면 기존에 스프링 부트 없이도 안내해주신 방법대로 내장시킬 수 있었을텐데 보편적으로 내장시키지 않고 분리 시켰을 때의 단점을 가져갔던 이유는 무엇 일까요?감사합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
Selector의 역할이 무엇인지 궁금합니다.
안녕하세요 선생님 질문이 있습니다.현재 제가보고있는 commit은 "@ConditionalOnMissingBean을 이용한 커스톰 빈 설정 적용" 입니다.META-INF/spring/tobyspring.config.MyAutoConfiguration.imports여기에 적힌 TomcatWebServerConfig에서 @Configuration을 지워도 메소드에 @Bean만 있으면 tomcat이 잘 실행이되는것을 확인했습니다.아예 @Bean까지 다 지우면 jetty dependency도 없으니 기동을 실패하는것을 확인했습니다.이때 jetty dependency를 추가하면 jetty로 기동하는것도 확인하였습니다. Selector가 JettyWebServerConfig , TomcatWebServerConfig를 load 할때 jetty dependency가 없으면 알아서 메소드 호출을 안하고 있으면 호출해주는것인가요?imports에 적힌 클래스들을 load하게 되면 어떻게 되는지 잘이해가 가지를 않습니다...
-
해결됨토비의 스프링 부트 - 이해와 원리
Decorator 패턴을 소개해주신 이유
proxy 패턴은 빈 주입할 때 proxy로 만들어지기 때문에 이를 이해시키는 목적으로 설명해주셨는데 decorator 패턴은 어떤 목적으로 소개해주신 건지 궁금합니다.제가 중간에 캐치하지 못 한 건지 궁금해서 글을 남깁니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
OnMyCondition class가 아니라 MyOnClassCondition 아닌가요?
안녕하세요 토비님, 정말 좋은 강의 잘 듣고 있습니다.다만 제가 초보라 그런지 이해하는데 시간이 조금 걸려서 여쭙습니다. 14:00즈음 나오는 diagram에서 OnMyClassCondition이라고 나오는데 아무리 강의를 돌려봐도 OnMyClassCondition은 안보이고 MyOnClassCondition만 보여서 제가 착각을 하고 있는건지 아니면 강의에 오타가 있는건지 궁금합니다.Condition과 MyClass라는 단어가 너무 많이 나와서 혼란스러워서 질문 남긴 것이고, 만약 오타라고 하면 지적할 생각은 아니었음을 말씀드립니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
ApplicationRunner이 생성되지 않는 것 같아요.
return 위에 System.out.println은 실행되는데, return 람다 안에 있는 System.out.println은 실행되지 않는 것 같아요. 어디서 잘못된 걸까요..?
-
미해결토비의 스프링 부트 - 이해와 원리
ApplicationContext.refresh() 하는 이유
registerBean 이후 refresh를 하는 이유가 궁금합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
코틀린으로 강의 따라하시는 분들이 계시다면 참고하세요. no-arg 설정이 필요합니다.
BeanPostProcessor는 매개변수가 없는 no-arg 생성자를 필요로 하는데요, 자바의 경우 굳이 매개변수를 생성자에서 주입하지 않아도 되지만 코틀린의 경우 JPA 엔티티나 현재 강의의 ServerProperties처럼 프로퍼티값을 읽어들여 객체를 생성하는 경우 생성자 파라미터를 보통 사용하실 텐데요,이 경우 따로. noarg 생성자가 만들어지지 않기 때문에 BeanPostProcessor가 디폴트 생성자를 만들어낼 수 있도록kotlin("plugin.allOpen") kotlin("plugin.noArg")을 이용해서 @Component 어노테이션으로 빈에 대한 no-arg 기능을 활성화해야합니다.gradle에서 다음과 같이 plugin을 포함하시구요plugins{ kotlin("plugin.noarg") version "1.7.22" //jpa를 사용하신다면 kotlin("plugin.jpa")에 포함되어 있습니다. } 아래에 Component 어노테이션에서 no-arg가 활성화될 수 있게 해당 부분을 적어주시면 됩니다.noArg { annotation("org.springframework.stereotype.Component") }all-open, no-arg 등의 플러그인에대한 더 자세한 설정에 대해서 궁금하시다면 아래 글을 참고하시면 좋습니다.https://techblog.woowahan.com/2675/
-
미해결토비의 스프링 부트 - 이해와 원리
스프링의 장점
안녕하세요. 토비님 강의 너무 잘듣고 있습니다. 강의를 듣다가 궁금한점이 생겨서 질문남깁니다.우선 저는 독립형 스프링 애플리케이션까지 들었습니다. 강의를 들으면서 스프링과 스프링 부트의 차이점과 이점은 이해가 쉽게 됐습니다. 하지만 서블릿 웹서버와 스프링 웹서버의 차이점에 대해서는 명확하게 이해하지 못했습니다.독립 실행형 서블릿 애플리케이션으로 웹 서버를 띄우는 것보다 독립 실행형 스프링 애플리케이션으로 웹 서버를 구성하는 것이 어떤 장점이 있는지 궁금합니다. 제가 이해한 바로는 서블릿 웹서버는 HTTP요청이 들어오면 컨테이너가 서블릿을 Mapping하고 서블릿이 요청을 처리하는 것이고 스프링 웹서버는 서블릿에서 스프링 컨테이너를 이용해서 요청을 처리하는 것입니다.혹여나 개념을 잘못 이해하고 있거나 뒷 내용에 이것에 대한 내용이 나온다면 알려주시면 감사하겠습니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
BooleanCondition 동작 질문
토비님. 안녕하세요!다름이 아니라 '스프링부트의 @Conditional' 항목을 공부하던 중에 conditional() 테스트 코드가 어떻게 동작할지 생각해보았습니다. 저는 true과 false가 1번씩 호출될 것이라고 추측을 했었는데, true가 3번이 호출되어서 생각과는 다른 결과를 확인하였습니다. 제가 무언가를 잘못 알고 있는 것 같아서 확인해보고 싶습니다. 어떠한 키워드로 알아보면 이것에 대해서 알 수 있을까요? 잘려서 보이지 않는 윗부분의 소스 코드는 강의 내용과 다른 점이 없이 작성되어있습니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
자료가 비어있습니다.
수업자료가 비어있어서 비슷한 문제로 글 올리신분들이 몇 있으시던데,보인다고 하시는 분들이 있으나...저는 수업자료를 다운받으니 폴더가 비어있습니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
테스트가 dataSource Bean을 읽어오지 못합니다.
토비님 강의랑 동일하게 설정했는데 동작을 안하네요 지금 @JdbcTest로 해결은 했는데 왜 읽어오지 못하는지 궁금합니다.예전 토비님 책 보면 xml을 읽어와서 빈을 넣어준 걸로 알고 있는데 classes는 어떻게 동작해서 저걸 못읽어오는걸까요?
-
미해결토비의 스프링 부트 - 이해와 원리
HikariDataSource가 존재하지 않는 이슈가 있습니다.
토비님이랑 같은 의존성 주입 받았는데 전 HikariDataSource라는 class가 존재하지 않습니다. 제가 잘못한게 있을까요
-
해결됨토비의 스프링 부트 - 이해와 원리
JmxAutoConfiguration가 Nagative matches 리스트에있습니다
이니셜라이저는 다음처럼 구성했고인텔리제이 커뮤니티 에디션을 사용해서 프로젝트를 열고 -Ddebug 를 주고 실행했을 때콘솔 결과는 다음과 같습니다.오전 8:52:26: Executing ':SpringbootAcApplication.main()'...> Task :compileJava UP-TO-DATE> Task :processResources UP-TO-DATE> Task :classes UP-TO-DATE> Task :SpringbootAcApplication.main(). ____ _/\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.7.8)2023-02-05 08:52:27.975 INFO 28856 --- [ main] c.e.s.SpringbootAcApplication : Starting SpringbootAcApplication using Java 11.0.18 on DESKTOP-010ET15 with PID 28856 (G:\Workspace_2023\Server\springboot-ac\build\classes\java\main started by doseon in G:\Workspace_2023\Server\springboot-ac)2023-02-05 08:52:27.978 INFO 28856 --- [ main] c.e.s.SpringbootAcApplication : No active profile set, falling back to 1 default profile: "default"2023-02-05 08:52:27.978 DEBUG 28856 --- [ main] o.s.boot.SpringApplication : Loading source class com.example.springbootac.SpringbootAcApplication2023-02-05 08:52:28.628 DEBUG 28856 --- [ main] ConditionEvaluationReportLoggingListener :============================CONDITIONS EVALUATION REPORT============================Positive matches:-----------------AopAutoConfiguration matched:- @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)AopAutoConfiguration.ClassProxyingConfiguration matched:- @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)- @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)GenericCacheConfiguration matched:- Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition)LifecycleAutoConfiguration#defaultLifecycleProcessor matched:- @ConditionalOnMissingBean (names: lifecycleProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition)NoOpCacheConfiguration matched:- Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition)PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched:- @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) did not find any beans (OnBeanCondition)SimpleCacheConfiguration matched:- Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition)SqlInitializationAutoConfiguration matched:- @ConditionalOnProperty (spring.sql.init.enabled) matched (OnPropertyCondition)- NoneNestedConditions 0 matched 1 did not; NestedCondition on SqlInitializationAutoConfiguration.SqlInitializationModeCondition.ModeIsNever @ConditionalOnProperty (spring.sql.init.mode=never) did not find property 'mode' (SqlInitializationAutoConfiguration.SqlInitializationModeCondition)TaskExecutionAutoConfiguration matched:- @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor' (OnClassCondition)TaskExecutionAutoConfiguration#applicationTaskExecutor matched:- @ConditionalOnMissingBean (types: java.util.concurrent.Executor; SearchStrategy: all) did not find any beans (OnBeanCondition)TaskExecutionAutoConfiguration#taskExecutorBuilder matched:- @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)TaskSchedulingAutoConfiguration matched:- @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler' (OnClassCondition)TaskSchedulingAutoConfiguration#taskSchedulerBuilder matched:- @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)Negative matches:-----------------ActiveMQAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)AopAutoConfiguration.AspectJAutoProxyingConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.aspectj.weaver.Advice' (OnClassCondition)ArtemisAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)BatchAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.batch.core.launch.JobLauncher' (OnClassCondition)Cache2kCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.cache2k.Cache2kBuilder' (OnClassCondition)CacheAutoConfiguration:Did not match:- @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) did not find any beans of type org.springframework.cache.interceptor.CacheAspectSupport (OnBeanCondition)Matched:- @ConditionalOnClass found required class 'org.springframework.cache.CacheManager' (OnClassCondition)CacheAutoConfiguration.CacheManagerEntityManagerFactoryDependsOnPostProcessor:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean' (OnClassCondition)- Ancestor org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)CaffeineCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.github.benmanes.caffeine.cache.Caffeine' (OnClassCondition)CassandraAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)CassandraDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)CassandraReactiveDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)CassandraReactiveRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.cassandra.ReactiveSession' (OnClassCondition)CassandraRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)ClientHttpConnectorAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)CodecsAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.http.codec.CodecConfigurer' (OnClassCondition)CouchbaseAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)CouchbaseCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)CouchbaseDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition)CouchbaseReactiveDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)CouchbaseReactiveRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)CouchbaseRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition)DataSourceAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)DataSourceInitializationConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.jdbc.datasource.init.DatabasePopulator' (OnClassCondition)DataSourceTransactionManagerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.jdbc.core.JdbcTemplate' (OnClassCondition)DispatcherServletAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)EhCacheCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'net.sf.ehcache.Cache' (OnClassCondition)ElasticsearchDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate' (OnClassCondition)ElasticsearchRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.elasticsearch.client.Client' (OnClassCondition)ElasticsearchRestClientAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.elasticsearch.client.RestClientBuilder' (OnClassCondition)EmbeddedLdapAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.unboundid.ldap.listener.InMemoryDirectoryServer' (OnClassCondition)EmbeddedMongoAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.MongoClientSettings' (OnClassCondition)EmbeddedWebServerFactoryCustomizerAutoConfiguration:Did not match:- @ConditionalOnWebApplication did not find reactive or servlet web application classes (OnWebApplicationCondition)ErrorMvcAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.Servlet' (OnClassCondition)ErrorWebFluxAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)FlywayAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.flywaydb.core.Flyway' (OnClassCondition)FreeMarkerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'freemarker.template.Configuration' (OnClassCondition)GraphQlAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlQueryByExampleAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlQuerydslAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlRSocketAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlReactiveQueryByExampleAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlReactiveQuerydslAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlWebFluxAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlWebFluxSecurityAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlWebMvcAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GraphQlWebMvcSecurityAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)GroovyTemplateAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'groovy.text.markup.MarkupTemplateEngine' (OnClassCondition)GsonAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition)H2ConsoleAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.h2.server.web.WebServlet' (OnClassCondition)HazelcastAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)HazelcastCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)HazelcastJpaDependencyAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)HibernateJpaAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.persistence.EntityManager' (OnClassCondition)HttpEncodingAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.filter.CharacterEncodingFilter' (OnClassCondition)HttpHandlerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.http.server.reactive.HttpHandler' (OnClassCondition)HttpMessageConvertersAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.http.converter.HttpMessageConverter' (OnClassCondition)HypermediaAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.hateoas.EntityModel' (OnClassCondition)InfinispanCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManager' (OnClassCondition)InfluxDbAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.influxdb.InfluxDB' (OnClassCondition)IntegrationAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.integration.config.EnableIntegration' (OnClassCondition)JCacheCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.cache.Caching' (OnClassCondition)JacksonAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)JdbcRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration' (OnClassCondition)JdbcTemplateAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.jdbc.core.JdbcTemplate' (OnClassCondition)JerseyAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.ServletRegistration' (OnClassCondition)JmsAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.jms.Message' (OnClassCondition)JmxAutoConfiguration:Did not match:- @ConditionalOnProperty (spring.jmx.enabled=true) did not find property 'enabled' (OnPropertyCondition)Matched:- @ConditionalOnClass found required class 'org.springframework.jmx.export.MBeanExporter' (OnClassCondition)JndiConnectionFactoryAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.jms.core.JmsTemplate' (OnClassCondition)JndiDataSourceAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)JooqAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.jooq.DSLContext' (OnClassCondition)JpaRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.jpa.repository.JpaRepository' (OnClassCondition)JsonbAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.json.bind.Jsonb' (OnClassCondition)JtaAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.transaction.Transaction' (OnClassCondition)KafkaAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.kafka.core.KafkaTemplate' (OnClassCondition)LdapAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.ldap.core.ContextSource' (OnClassCondition)LdapRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.ldap.repository.LdapRepository' (OnClassCondition)LiquibaseAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'liquibase.change.DatabaseChange' (OnClassCondition)MailSenderAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.activation.MimeType' (OnClassCondition)MailSenderValidatorAutoConfiguration:Did not match:- @ConditionalOnSingleCandidate did not find required type 'org.springframework.mail.javamail.JavaMailSenderImpl' (OnBeanCondition)MessageSourceAutoConfiguration:Did not match:- ResourceBundle did not find bundle with basename messages (MessageSourceAutoConfiguration.ResourceBundleCondition)MongoAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)MongoDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)MongoReactiveAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)MongoReactiveDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)MongoReactiveRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)MongoRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)MultipartAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.MultipartConfigElement' (OnClassCondition)MustacheAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.samskivert.mustache.Mustache' (OnClassCondition)Neo4jAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)Neo4jDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)Neo4jReactiveDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)Neo4jReactiveRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)Neo4jRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)NettyAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.netty.util.NettyRuntime' (OnClassCondition)OAuth2ClientAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity' (OnClassCondition)OAuth2ResourceServerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken' (OnClassCondition)PersistenceExceptionTranslationAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor' (OnClassCondition)ProjectInfoAutoConfiguration#buildProperties:Did not match:- @ConditionalOnResource did not find resource '${spring.info.build.location:classpath:META-INF/build-info.properties}' (OnResourceCondition)ProjectInfoAutoConfiguration#gitProperties:Did not match:- GitResource did not find git info at classpath:git.properties (ProjectInfoAutoConfiguration.GitResourceAvailableCondition)QuartzAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.quartz.Scheduler' (OnClassCondition)R2dbcAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)R2dbcDataAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.r2dbc.core.R2dbcEntityTemplate' (OnClassCondition)R2dbcInitializationConfiguration:Did not match:- @ConditionalOnClass did not find required classes 'io.r2dbc.spi.ConnectionFactory', 'org.springframework.r2dbc.connection.init.DatabasePopulator' (OnClassCondition)R2dbcRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)R2dbcTransactionManagerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.r2dbc.connection.R2dbcTransactionManager' (OnClassCondition)RSocketGraphQlClientAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)RSocketMessagingAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition)RSocketRequesterAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition)RSocketSecurityAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.rsocket.core.SecuritySocketAcceptorInterceptor' (OnClassCondition)RSocketServerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.rsocket.core.RSocketServer' (OnClassCondition)RSocketStrategiesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'io.netty.buffer.PooledByteBufAllocator' (OnClassCondition)RabbitAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.rabbitmq.client.Channel' (OnClassCondition)ReactiveElasticsearchRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient' (OnClassCondition)ReactiveElasticsearchRestClientAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'reactor.netty.http.client.HttpClient' (OnClassCondition)ReactiveMultipartAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.http.codec.multipart.DefaultPartHttpMessageReader' (OnClassCondition)ReactiveOAuth2ClientAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)ReactiveOAuth2ResourceServerAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity' (OnClassCondition)ReactiveSecurityAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)ReactiveUserDetailsServiceAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.authentication.ReactiveAuthenticationManager' (OnClassCondition)ReactiveWebServerFactoryAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.http.ReactiveHttpInputMessage' (OnClassCondition)RedisAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.redis.core.RedisOperations' (OnClassCondition)RedisCacheConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.redis.connection.RedisConnectionFactory' (OnClassCondition)RedisReactiveAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)RedisRepositoriesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.redis.repository.configuration.EnableRedisRepositories' (OnClassCondition)RepositoryRestMvcAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration' (OnClassCondition)RestTemplateAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.client.RestTemplate' (OnClassCondition)Saml2RelyingPartyAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository' (OnClassCondition)SecurityAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.authentication.DefaultAuthenticationEventPublisher' (OnClassCondition)SecurityFilterAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.config.http.SessionCreationPolicy' (OnClassCondition)SendGridAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'com.sendgrid.SendGrid' (OnClassCondition)ServletWebServerFactoryAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.ServletRequest' (OnClassCondition)SessionAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.session.Session' (OnClassCondition)SolrAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.apache.solr.client.solrj.impl.CloudSolrClient' (OnClassCondition)SpringApplicationAdminJmxAutoConfiguration:Did not match:- @ConditionalOnProperty (spring.application.admin.enabled=true) did not find property 'enabled' (OnPropertyCondition)SpringDataWebAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.data.web.PageableHandlerMethodArgumentResolver' (OnClassCondition)TaskSchedulingAutoConfiguration#scheduledBeanLazyInitializationExcludeFilter:Did not match:- @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition)TaskSchedulingAutoConfiguration#taskScheduler:Did not match:- @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition)ThymeleafAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.thymeleaf.spring5.SpringTemplateEngine' (OnClassCondition)TransactionAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)UserDetailsServiceAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition)ValidationAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.validation.executable.ExecutableValidator' (OnClassCondition)WebClientAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)WebFluxAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)WebMvcAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.Servlet' (OnClassCondition)WebServiceTemplateAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.oxm.Marshaller' (OnClassCondition)WebServicesAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.ws.transport.http.MessageDispatcherServlet' (OnClassCondition)WebSessionIdResolverAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'reactor.core.publisher.Mono' (OnClassCondition)WebSocketMessagingAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer' (OnClassCondition)WebSocketReactiveAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.Servlet' (OnClassCondition)WebSocketServletAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.servlet.Servlet' (OnClassCondition)XADataSourceAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.transaction.TransactionManager' (OnClassCondition)Exclusions:-----------NoneUnconditional classes:----------------------org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfigurationorg.springframework.boot.autoconfigure.context.LifecycleAutoConfigurationorg.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfigurationorg.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfigurationorg.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration2023-02-05 08:52:28.659 INFO 28856 --- [ main] c.e.s.SpringbootAcApplication : Started SpringbootAcApplication in 1.188 seconds (JVM running for 1.655)2023-02-05 08:52:28.666 DEBUG 28856 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state LivenessState changed to CORRECT2023-02-05 08:52:28.670 DEBUG 28856 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state ReadinessState changed to ACCEPTING_TRAFFICDeprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.See https://docs.gradle.org/7.6/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 2s3 actionable tasks: 1 executed, 2 up-to-date오전 8:52:28: Execution finished ':SpringbootAcApplication.main()'.