월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 부트 개념과 활용
application.yml 파일 분리
- application.yml 을 분리하고, spring.profiles.include를 해서 AppicationRunner 클래스를 만들어서 테스트를 해봤는데요, - 테스트할때, Properties 클래스 생성해서(@ConfigurationProperties) 했습니다.) 하나에 모두 다 있을때는 값이 출력이 되었는데, 분리하고 나니 값이 null로 출력됩니다. 에러는 없어요. 무슨 문제일까요?
- 미해결스프링 부트 개념과 활용
안녕하세요 기선님 서블릿 어플리케이션 구조에 대해 질문드립니다
이전에 기선님 강의인 스프링 웹 MVC를 수강하고 스프링 부트를 수강중입니다. MVC 강의에서는 스프링 부트 없이 진행했던 터라 궁금증이 생겨 질문 드립니다. (사진 첨부가 되지 않아 사진 URL을 등록했습니다.) 기존 MVC방식에서 서블릿 프로그램에서 스프링의 기능을 붙여가며 학습을 했을때 제가 생각한 이미지는 이러한 이미지 였는데요 스프링 부트를 적용해도 이와 동일한 이미지로 이해하면 될까요? 제가 선생님 강의를 듣고 이해하기로는 스프링 컨테이너와 서블릿 컨테이너는 별개이고, 컨텍스트 로드 리스너에 의해 Controller, ViewResolver, HandlerMapping과 같은 '빈'들은 root ApplicationContext에 접근 가능한 ServletContext에 등록이 되고 Service, Repository와 같은 빈들은 root ApplicationContext에 등록이 된다고 생각했는데요 맞는지 궁금합니다. 또 하나 질문을 드리자면 서블릿 컨텍스트는 톰캣에 의해 생성이 되어지는데 ApplicationContext는 DispatcherServlet을 통해 인스턴스화 된다 라는 내용을 봐서 그럼 스프링 IoC컨테이너를 서블릿 컨텍스트가 로드하는건가..? 라는 생각을 했는데 혹시 맞을까요? 질문이 길어서 죄송합니다. 좋은 강의 내주셔서 학습에 큰 도움이 되고있습니다 🙏
- 미해결스프링 부트 개념과 활용
안녕하세요 질문이 있습니다. :)
안녕하세요. 백기선님 :) 강의 잘 수강하고 있습니다. 이번 강의를 들으면서 궁금한 점이 있어 질문 남깁니다. 1. 강의 내용에서 application.yml 파일에 정의된 속성값을 starter 의존성 내 HolomanConfiguration 클래스에서 @ConfigurationProperties와 @EnableConfigrationProperties 사용하여 주입받는 것으로 이해했는데요. 만약 spring-getting-started 프로젝트에서 application.yml 파일에 holoman 속성값을 주지 않았을 경우, 디폴트 값을 starter 내부에 선언할 수 있는 방법이 있을까요? (가령 holoman.name="kim"이 생략되었을 경우, null 값이 name에 삽입될 텐데, 디폴트 값을 설정하여 "default-name"으로 초기화하는 식입니다.) 2. spring-boot-autoconfigure-processor 의존성의 역할이 무엇인지, spring-boot-autoconfigure 와의 차이점이 무엇인지 궁금합니다. (좀 광범위한 질문인 것 같습니다. ㅜㅜ processor 계통 의존성에 대해 이해할 수 있는 참고 자료가 있을지 궁금합니다.)
- 미해결스프링 부트 개념과 활용
어노테이션 헷갈릴때
Component, Bean 등의 어노테이션이 잘 이해가 안가면 어떤 강의를 먼저 수강해야하나요? 아니면 그때그때 찾아가보면서 수강해도 큰 문제 없을까요
- 미해결스프링 부트 개념과 활용
에러 내용입니다.
org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.13.jar:5.3.13] at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_281] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) [spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) [spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) [spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) [spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) [spring-boot-2.6.1.jar:2.6.1] at me.sunghyuki.webservershowcase.WebservershowcaseApplication.main(WebservershowcaseApplication.java:12) [classes/:na] Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:229) ~[spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) ~[spring-boot-2.6.1.jar:2.6.1] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.13.jar:5.3.13] ... 14 common frames omitted Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailed at org.apache.catalina.core.StandardService.addConnector(StandardService.java:238) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) ~[spring-boot-2.6.1.jar:2.6.1] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) ~[spring-boot-2.6.1.jar:2.6.1] ... 16 common frames omitted Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1075) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.catalina.core.StandardService.addConnector(StandardService.java:234) ~[tomcat-embed-core-9.0.55.jar:9.0.55] ... 18 common frames omitted Caused by: java.lang.IllegalArgumentException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48) at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:231) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1213) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1299) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:614) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.catalina.connector.Connector.startInternal(Connector.java:1072) ~[tomcat-embed-core-9.0.55.jar:9.0.55] ... 20 common frames omitted Caused by: java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48) at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:819) ~[na:1.8.0_281] at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2027) ~[na:1.8.0_281] at java.security.KeyStore.load(KeyStore.java:1445) ~[na:1.8.0_281] at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:67) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:215) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:281) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:245) ~[tomcat-embed-core-9.0.55.jar:9.0.55] at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97) ~[tomcat-embed-core-9.0.55.jar:9.0.55] ... 26 common frames omitted Caused by: java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 48) at sun.security.util.ObjectIdentifier.<init>(ObjectIdentifier.java:285) ~[na:1.8.0_281] at sun.security.util.DerInputStream.getOID(DerInputStream.java:321) ~[na:1.8.0_281] at com.sun.crypto.provider.PBES2Parameters.engineInit(PBES2Parameters.java:267) ~[sunjce_provider.jar:1.8.0_271] at java.security.AlgorithmParameters.init(AlgorithmParameters.java:293) ~[na:1.8.0_281] at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:815) ~[na:1.8.0_281] ... 34 common frames omitted Process finished with exit code 1 에러 내용입니다. 해결방법 있을까요? 프로퍼티 설정도 잘 한 것 같고 keystore 파일 path는 루트 그리고 resource 디렉토리 안으로 넣어 classpath: 추가해서 실행시켜 봤는데도 같은 에러가 뜨네요 ㅠㅠ 현재 java 8 버전 스프링 부트 2.6.1, Apache Maven 3.8.4 입니다.
- 해결됨스프링 부트 개념과 활용
MongoDB slice test
학습하시는 분들이 혹여나 오류가 있을까봐 게시판에 남겨놓습니다.spring boot 2.6버전 이상 쓰시는 분들은 테스트 코드가 오류가 날수 있습니다. Caused by: java.lang.IllegalStateException: Set the spring.mongodb.embedded.version property or define your own MongodConfig bean to use embedded MongoDB at org.springframework.util.Assert.state(Assert.java:76) at org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration.determineVersion(EmbeddedMongoAutoConfiguration.java:148) at org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration.embeddedMongoConfiguration(EmbeddedMongoAutoConfiguration.java:128) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ... 159 more 해결책을 찾아보니 다음과 같이 해결해줄수 있었습니다. @DataMongoTest@TestPropertySource(properties = "spring.mongodb.embedded.version=3.5.5")@ActiveProfiles("test") spring boot 2.6이상버전 부터는 spring.mongodb.embedded.version은 자동 구성된 임베디드 MongoDB를 사용하도록 설정해야하는것 같습니다.참고: https://stackoverflow.com/questions/70047380/excluding-embededmongoautoconfiguration-failed-in-spring-boot-2-6-0https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes#embedded-mongo혹시 에러때문에 실패하시는분들이 있으시면 참고하시면 좋을것 같습니다.그리고 교안도 수정해주신다면 감사하겠습니다.항상 좋은강의 만들어주셔서 감사합니다.
- 해결됨스프링 부트 개념과 활용
spring boot profile 관련 내용
수강자 분들이 헷갈리시는 분이 있어서 질문글에 남겨드립니다. spring boot 프로파일 설정중에 spring.profiles.include = myprofile 이 부분에서 에러가 많이 나고 저도 똑같은 경험을 해서찾아보다가 spring boot 2,4버전 이후부터는 다음과 같이 기술한다고 합니다. spring.profiles.group."myprofile"
- 미해결스프링 부트 개념과 활용
앱 실행 중 외부 의존성 추가시 어떻게 자동 등록되는지 궁금합니다..!
안녕하세요. 기선님 항상 강의 잘듣고 있습니다. 감사합니당 스프링 앱이 구동되면 @ComponentScan, @EnableAutoConfigure에 의해 필요한 빈들을 스캔하고 초기화하게 된다고 이해하고 있습니다. 하지만 앱을 실행중에 외부 의존성을 추가하더라도 앱이 멈추지 않고 해당 의존성 빈들이 추가되는데.... 이게 어떻게 가능한건지 궁금합니다. 찾아봐도 명확한 답을 찾기가 힘들더라구요.. 제가 생각한 가설로는 1. 의존성이 추가되면 이벤트처럼 콜백으로 스프링에게 알려줘서 추가된 의존성들을 빈으로 등록한다. 2. 스프링이 특정 주기마다? 새로 추가된 의존성이 있는지 체크하고 등록한다. 정도가 떠오르는데... 어떠한 원리로 추가되는건지 궁금합니다.
- 미해결스프링 부트 개념과 활용
JavaBeans 스펙에 대한 질문
"(HttpMessageConverter는) javabeans 규약에 따라서 getter/setter를 사용해서 바인딩 해주니까요." 라는 기선님 멘트를 통해서 JavaBeans라는 specification을 처음 알게되었는데요. JavaBeans 스펙이 Spring에 어떻게 스며들어 있고, 얼마나 영향을 미쳤는지가 갑자기 궁금하더라고요. Spring에서 String <-> Object간 변환, 프로퍼티 바인딩이 필요한 경우(xml 설정을 Object로 instantiate 할 때등..)에는 전부 JavaBeans 스펙을 따른다고 간주해도 안전할까요? JavaBeans 스펙을 따르는 주요한 예시가 또 어떤게있을까요? 강의 주제와 관련이 적고, 다소 광범위한 질문으로 느껴지기도 하지만.. 너무 궁금해서 실례를 무릅쓰고 여쭤봅니다.
- 미해결스프링 부트 개념과 활용
AutoConfiguration에 대해 질문드립니다.
안녕하세요! 강의 잘 듣고 있습니다. `@ComponentScan`에 의한 빈 스캔이 선행된 뒤에 `@EnableAutoConfiguration`에 의해 미리 설정된 빈들이 자동 등록된다고 이해했는데요. 왜 스프링 부트에서는 이런 순서로 빈을 등록하도록 구현했는지 궁금합니다. 제가 직관적으로 생각하기엔 반대가 더 자연스러워 보여서 질문 드립니다. 보통 일반적으로 무언가 디폴트 설정이 있고 거기에 추가적인 커스텀 설정을 제공할 때에는, 디폴트 설정을 먼저 해둔 뒤에 커스텀 설정을 덮어쓰도록 유도하는 걸 더 많이 본것같아서요. 그리고 반대 순서라면 그냥 빈을 덮어쓰면 되니까, `@ConditionalOnMissingBean`도 필요 없지않나 하는 생각도 들고요.
- 미해결스프링 부트 개념과 활용
Project structure settings(단축키) : command + ;
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 해결됨스프링 부트 개념과 활용
mvn package 관련..
패키징하고 java -jar 를하게되면 아래와 같이 실패하게 되는데 혹시 원인을 알 수 있을까요? 검색해보고 시도(cglib추가, 메이븐 다시 다운받아서 환경등록후 실행)를 해봤는데 안되네요... start.spring.io 에서 생성해주면 되는데..인텔리j maven으로 아무리 강의를 다시보고 똑같이 해도 ㅠㅠ안되네요.. java.lang.IllegalStateException: Cannot load configuration class: me.dongwoon.Application at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:414) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:254) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:284) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:128) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) ~[spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) ~[spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) ~[spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) ~[spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE] at me.dongwoon.Application.main(Application.java:9) ~[classes!/:1.0-SNAPSHOT] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[spring-boot-getting-started-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[spring-boot-getting-started-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) ~[spring-boot-getting-started-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) ~[spring-boot-getting-started-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] Caused by: java.lang.ExceptionInInitializerError: null at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:122) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:110) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:403) ~[spring-context-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] ... 20 common frames omitted Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6c629d6e at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.KeyFactory$Generator.create(KeyFactory.java:221) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.KeyFactory.create(KeyFactory.java:174) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.KeyFactory.create(KeyFactory.java:153) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.proxy.Enhancer.<clinit>(Enhancer.java:73) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] ... 23 common frames omitted Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6c629d6e at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[na:na] at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[na:na] at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) ~[na:na] at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) ~[na:na] at org.springframework.cglib.core.ReflectUtils$1.run(ReflectUtils.java:61) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at java.base/java.security.AccessController.doPrivileged(AccessController.java:569) ~[na:na] at org.springframework.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:243) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329) ~[spring-core-5.0.7.RELEASE.jar!/:5.0.7.RELEASE] ... 35 common frames omitted
- 미해결스프링 부트 개념과 활용
ViewResolver 관련 질문 있습니다
이번이 처음 듣는 것도 아니고, 몇 년 전에 구매하여 지금까지 여러번 반복해서 정주행 했는데 오늘 갑자기 잘 이해가 안가는 부분이 생겼습니다. 제가 지금 이해하고 있는 것은 이렇습니다.1. ViewResolver는 View를 resolving한다.(ThymeleafViewResolver를 예로 들면 문자열을 View의 이름으로 해석해서 View를 resolving한다.)2. 강의 속 핸들러는 @ResponseBody가 붙어 있으므로 View가 없다.3. ViewResolver는 요청의 accept 헤더를 확인한다.4. accept 헤더에 맞게 User라는 객체를 변환하여 응답 본문에 싣는 일은 HttpMessageConverters의 구현체가 한다.일단 2번이 맞다면, ViewResolver는 강의 속 핸들러에서 어떤일을 하는 건가요? 아니면 응답 본문도 하나의 View로 볼 수 있는건가요? 아니면 ViewResolver가 @ResponseBody를 보고 View 없이 응답 본문만 있으면 된다고 판단하여 HttpMessageConverters에게 알려주는 일을 하는건가요?? 3번도 맞고, 4번도 맞다면 ViewResolver는 자기가 변환 작업을 해줄 것도 아니면서 accept 헤더는 왜 확인하는 건가요? 오히려 변환작업을 하는 HttpMessageConverters가 확인하는 게 더 자연스러울 것 같은데.. ViewResolver가 어떤 일을 하는지, HttpMessageConverters와의 협업? 플로우가 어떻게 되는지 궁금합니다. 강의 나온지가 언젠데 지금 질문을 드려 죄송합니다 :( 좋은 강의 감사합니다. 항상 잘 보고 있습니다!
- 미해결스프링 부트 개념과 활용
WebClient.Builder, RestTemplateBuilder bean 설정 질문합니다.
WebClient나 restTemplate은 config파일에 Bean으로 만들어 사용하면 더 편리할 거 같은데 굳이 사용 시, builder를 사용하는 이유가 있나요?
- 해결됨스프링 부트 개념과 활용
TestPropertySource질문입니다.
안녕하세요 강사님 언제나 좋은 강의 감사드립니다. 강의 내용을 따라서 열심히 따라 하고는 있는데, TestPropertySources로 우선순위를 먼저 받게끔 작업을 했는데 테스트 코드가 통과를 해서 혹시 뭐가 잘못 됐는지 여쭤보고 싶어서 질문을 남깁니다. 위의 코드를 보면 기존 application.yml의 server.port가 7443이고, test.yml의 설정이 6663인데, 해당 코드를 돌려보니 application.yml의 설정값을 우선순위로 읽어들여서 테스트 코드가 성공하였습니다. 혹시 현재 기준으로 우선순위가 변경이 된건지, 아니면 제가 무슨 실수를 한 것인지 한번만 봐 주시면 감사드리겠습니다
- 미해결스프링 부트 개념과 활용
테스트 코드 작성할 때 빈을 주입받을 때 접근제한자를 명시하지 않는 이유?
안녕하세요 기선님 강의 잘 보구 있습니다. 테스트 코드를 하나도 모르다가 기선님 강의들 쭉 보면서 테스트를 따라하다보니 조금 익숙해진 느낌이 있는데요, 테스트 코드가 아닌 실제 코드에서는 빈을 주입받을 때 항상 private 접근제한자를 명시하시던데 테스트 코드 작성시에는 굳이 명시하지 않고 디폴트를 사용하는 이유가 궁금합니다. 단지 타이핑을 적게하는 편의상의 이유 뿐인가요??
- 미해결스프링 부트 개념과 활용
패키징 할때 application-{prod/stage/dev}.properties 선택이 가능할까요?
소스를 package 해서 .WAR 로 만들때, 아래와 같이 각자 db설정이나 프로퍼티 설정이 다른경우가 꽤 있습니다. application-prod.properties application-stage.properties application-dev.properties mvn package 할때 argument 추가로 주거나 해서 prod/stage/dev 를 적용시켜서 .WAR를 만들수는 없나요? 참고로 외부설정1부~3부, profile설정 강의를 쭉봤지만, 저희쪽 소스는 만드신것 처럼 keesunProperties을 선언해서 runner에서 주입받거나 해 놓진 않았습니다. 제가 소스에대한 오너십은 딱히 없어서 바꾸자고 하기엔 좀 무리가 있는데.... 그냥 패키징 단계에서 적용할 프로퍼티 파일을 선택할 방법은 없을까요? ㅠㅠ
- 미해결스프링 부트 개념과 활용
Neo4jRunner를 통한 연동테스트
안녕하세요. 강의를 수강하면서 Spring Boot와 Neo4j 연동테스트를 진행하고 있는데요. 현재기준 최신버전(Spring Boot 2.5.0 / spring-data-neo4j 6.1.1)에서 바뀐 부분이 좀 많은 것 같네요. Account 빈에 @NodeEntity Annotation이 아닌 @Node Annotation을 넣어줘야하는 것까지는 공식 문서(https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference)를 통해 확인했는데요. 연동테스트를 할 때 강의에 있는대로 하려니 잘 안되네요. 버전이 업데이트되면서 뭔가 바뀐 부분이 좀 많은 것 같은데요. 공식 문서를 보거나 구글링을 해봐도 어떤 부분이 바뀌었는지 명확하게 확인하기 힘드네요. 공식 문서를 확인해보니 org.neo4j.driver.Driver 클래스에 있는 session 메서드를 가지고 Session 인스턴스를 가져온 후 그 인스턴스에서 트랜잭션 관련 메서드를 사용하는 듯한 내용이 있었는데 이 방법이 맞는건지 정확히 모르겠네요. 이 부분에 대해 어떻게 학습을 해야할까요?? 관련 내용에 대해 정리해놓으신 강의 혹은 코드가 있으시다면 공유해주시면 감사하겠습니다.
- 미해결스프링 부트 개념과 활용
mvn package 오류가 뜨는데 원인을 모르겠습니다.
C:\Users\kjs50\IdeaProjects\SpringBootStart>mvn package C:\Users\kjs50\IdeaProjects\SpringBootStart>set JAVA_HOME=D:\01.app\java\jdk1.6.0_31 [INFO] Scanning for projects... Downloading: http://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-st arter-parent/2.0.3.RELEASE/spring-boot-starter-parent-2.0.3.RELEASE.pom [ERROR] The build could not read 1 project -> [Help 1] [ERROR] [ERROR] The project org.example:SpringBootStart:1.0-SNAPSHOT (C:\Users\kjs50\IdeaProje cts\SpringBootStart\pom.xml) has 1 error [ERROR] Non-resolvable parent POM: Could not transfer artifact org.springframework.b oot:spring-boot-starter-parent:pom:2.0.3.RELEASE from/to central (http://repo.maven.apac he.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/springf ramework/boot/spring-boot-starter-parent/2.0.3.RELEASE/spring-boot-starter-parent-2.0.3. RELEASE.pom. Return code is: 501 , ReasonPhrase:HTTPS Required. and 'parent.relativePath ' points at wrong local POM @ line 17, column 13 -> [Help 2] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException [ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
- 미해결스프링 부트 개념과 활용
undertow ssl 적용 시 properties 말고 소스 코드로 설정이 가능할까요?
undertow를 사용해서 ssl 설정을 해보려고 하고있습니다! ssl 설정을 application.properties가 아닌 소스 코드로 구현이 가능할까요? port 까지는 WebServerFactoryCustomizer 를 구현해서 UndertowServletWebServerFactory.setPort를 이용하여 구현했는데 ssl은 찾아봐도 잘 안보여서 여쭤봅니다! 감사합니다.