묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
자바 OS 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]자바 os 관련해서, 개발 머신은 맥북이나 실제 자바로 개발한 API를 리눅스 또는 AWS에서 돌린다고 하면, JAVA 특성상 크게 문제는 없을것 같지만, 맥에 최적화 된 JAVA를 설치하는게 좋은 것인지 아니면 서버에 맞추어 설치하는게 좋은것인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
웹 스코프에서 Provider 사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 Provider에 대해 이해한게 맞는지 궁굼해서 질문 드립니다. 강의는 9강 스코프와 Provider입니다!먼저 Error creating bean with name 'myLogger': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton;이 오류가 일어나는 이유가 스프링 컨테이너에서 request 스코프 빈에 대한 의존관계를 주입하려고 하는데, 아직 클라이언트가 요청을 하지 않아서 리퀘스트 스코프 빈이 생성되지 않아서 오류가난다라고 이해했습니다1번이 맞다면..Provider을 사용하는 이유가, Request 스코프 빈이 의존관계 주입 시점에 호출이 안되서 오류가 났었는데, 클라이언트가 요청한 시점에 getObject나 get 메서드를 이용해서 request 스코프 빈을 생성하고 반환하는 DL기능을 써서, 의존관계가 잘 주입되게 해준다라고 이해했습니다질문은 총 두 개 입니다.
-
해결됨김영한의 실전 자바 - 기본편
인텔리제이 알트 엔터 단축키 질문입니다.
이 부분 알트 엔터 눌러도 이렇게 선택하는 창이 안 뜨고 알트만 눌러도 안 뜨는데 설정을 바꿔야할까요?=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
해결됨스프링 핵심 원리 - 기본편
스코프와 Provider 강의에서 질문합니다.
안녕하세요. 선생님 영상을 보면서 라이브 코딩하면서 오류가 발생할때 저는 오류가 발생을 안하고오류가 발생하면 안되는 곳에서는 발생해서 질문남깁니다.package web; import hello.core.common.MyLogger; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } } package web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; public void logic(String id) { MyLogger myLogger = myLoggerProvider.getObject(); myLogger.log("service id = " + id); } } 18:48:19.302 [main] INFO hello.core.CoreApplication -- Starting CoreApplication using Java 17.0.8.1 with PID 1715 (/Users/kssk3-/Desktop/study/core/build/classes/java/main started by kssk3- in /Users/kssk3-/Desktop/study/core) 18:48:19.303 [main] INFO hello.core.CoreApplication -- No active profile set, falling back to 1 default profile: "default" 18:48:19.661 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer -- Tomcat initialized with port 8080 (http) 18:48:19.665 [main] INFO o.a.coyote.http11.Http11NioProtocol -- Initializing ProtocolHandler ["http-nio-8080"] 18:48:19.665 [main] INFO o.a.catalina.core.StandardService -- Starting service [Tomcat] 18:48:19.665 [main] INFO o.a.catalina.core.StandardEngine -- Starting Servlet engine: [Apache Tomcat/10.1.16] 18:48:19.683 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] -- Initializing Spring embedded WebApplicationContext 18:48:19.684 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext -- Root WebApplicationContext: initialization completed in 363 ms call AppConfig.memberRepository call AppConfig.memberService call AppConfig.orderService 18:48:19.817 [main] INFO o.a.coyote.http11.Http11NioProtocol -- Starting ProtocolHandler ["http-nio-8080"] 18:48:19.825 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer -- Tomcat started on port 8080 (http) with context path '' 18:48:19.829 [main] INFO hello.core.CoreApplication -- Started CoreApplication in 0.642 seconds (process running for 1.077)영상초반에 Provider 적용후 강의에서는 local 사이트 화면에서는 OK로 변경된 화면이 나오지만저의 사이트에서는 여전히 오류가 발생하고 있어서 문의드립니다.추가로 인텔리제이 종료후 재시작해서 CoreApplication를 작동해보았는데 추가적인 오류가 나왔습니다. 18:59:26.308 [main] INFO o.a.coyote.http11.Http11NioProtocol -- Starting ProtocolHandler ["http-nio-8080"] 18:59:26.310 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext -- Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' 18:59:26.317 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger -- Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 18:59:26.325 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter -- *************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that's listening on port 8080 or configure this application to listen on another port. Process finished with exit code 1
-
해결됨김영한의 실전 자바 - 기본편
6. 접근 제어자 수업 자료에 정리 부분 내용이 안 보입니다
수업 자료 지우고 다시 받아봐도 안 나옵니다 ㅠ=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결김영한의 실전 자바 - 기본편
인터페이스에 없는 메서드를 자식 클래스에 추가했을 때 호출하는법 (다운캐스팅?)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]인터페이스를 이용해서 여러 자동차를 만들고 운전자가 자동차의 기능을 사용하게 하는 예제에서 특정 자동차 클래스에만 있는 메서드를 만든다면 호출을 어떻게 해야될까요? 예를들어 Model3에만 자율주행 기능을 추가하고 싶어서public void autoPilot() { System.out.println("자율주행을 시작합니다.");}이런식으로 메서드가 추가됐을때 운전자가 자율주행 기능을 호춣하려면 어떻게 해야되는지 궁금합니다. 제가 비유적으로 이해한 바로는 특정 자동차에만 탑재된 기능을 인터페이스에서 알 수 없으니 따로 배워야한다 --> 운전자 클래스의 코드 수정이 필요하다였고,실제 코드로는 운전자가 가진 Car 인스턴스가 Model3 클래스일 경우 다운캐스팅을 해서 autoPilot 메서드를 호출하는 방식으로 풀긴 했는데, 다운캐스팅이 아직 익숙치 않아서 불안한 마음도 있고 더 좋은 방법이 있을까 해서 질문 드립니다.
-
미해결김영한의 실전 자바 - 기본편
실제 활용 관점
안녕하세요 강의를 듣던 와중에 궁금한 점이 생겨 질문 남깁니다.실제로 그렇다면 추상 클래스와 인터페이스 중에 인터페이스를 사용하는게 이점일 것 같은데.대부분의 경우 인터페이스로 구현되고, 추상 클래스는 사용하지 않는 것인가요 ?백엔드 개발 시에도 인터페이스 구현을 통해서만 작성하는 것 같아 여쭤봅니다.
-
해결됨스프링 핵심 원리 - 기본편
스프링 빈 조회 - 상속 관계 질문있습니다.
안녕하세요!강의에서 부모 타입으로 조회하면, 자식 타입도 함께 조회가 되기 때문에이럴 때, ac.getBean(DiscountPolicy.class) 로 조회하면, 위의 두 개가 조회된다고 설명해주셨는데요.그렇다면, 각각 RateDiscountPolicy와 FixDiscountPolicy 클래스는 DiscountPolicy에 자식 클래스로 보아도 되는 건가요?java에 완전히 익숙하진 않아서 일반적으로 상속한다는 것이 인터페이스의 구현에도 적용할 수 있는 개념인가 해서요..!인터페이스를 implements해서 구현하는 것도 상속하는 것이고, 그래서 부모 자식간의 관계가 성립하는 것으로 보면 될까요??또 질문은 현재 위의 config만 보면, bean으로 올라간 객체는 RateDiscountPolicy와 FixDiscountPolicy밖에 없는거죠?? DiscountPolicy 인터페이스 자체는 빈으로 등록되지 않는건가요..?원래 부모타입으로 조회하였을 때 자기 자신과 자식 타입들이 조회된다고 해서.. 3이라고 생각했는데,여기서는 빈으로 등록된 객체가 RateDiscountPolicy와 FixDiscountPolicy로 2개니까 해서요..그리고 이건 따로 궁금한 점인데, 인터페이스는 원래 빈으로 등록이 안되나요..??질문이 번잡스러워서 죄송합니다..ㅜㅜ
-
미해결스프링 핵심 원리 - 기본편
이런 설계에 대한 공부는 어떻게 해야 할까요...
강의에서 주문, 회원.... createrOdrer 하셔서 머리속에 있는 개발을 코드로 타타타탁 굉장히 쉽게 구현하시는것 같은데강의 보며 따라 치면 아 그렇구나 이해는 되지만막상 제가 뭘 개발하고자 하니 어떤 필드가 필요하고 어떤 매게변수가 필요하고... 감이 전혀 잡히질 않습니다. SI에서 개발자로 일을 하고 있는데 VO개발 방식이 아닌 Map으로 진행중이라 객체의 필드값이 아닌 ,화면에서 필요로 하는 값을 주고 받으니 점점 개발과 설계에 대해 자신감도 잃어가고 있습니다...
-
해결됨스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException 관한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [F:\study\spring-boot-study2\core\out\production\classes\springbootstudy2\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'springbootstudy2.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1193) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1442) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:552) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ... 17 moreCaused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'springbootstudy2.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1418) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 41 more 현재 [옵션 처리] 수업까지 들으면서 'CoreApplicationTests'에서 에러가 발생하고 있습니다. 커뮤니티 및 인터넷에서 해당 문제에 대해서 파악을 하는데... MemberRepository와 DiscountPolicy의 스프링 빈 등록이 중복되어 나온다고 설정이 되어 있는 것 같습니다 그래서 MemoryMemberRepository 파일과 RateDiscountPolicy 파일에 @Primary 애노테이션을 넣어서 당장 정상적으로 돌아가는 것을 확인 후 문제는 없앴지만 근본적인 문제 해결로는 이해가 되지 않아서 도움을 요청하고자 글 남겼습니다.
-
미해결객체 지향 프로그래밍 입문
6분 26초에 말하는 객체의 안에 있는 프로시저란 객체의 메서드를 말하는건가요?
6분 26초에 말하는 객체의 안에 있는 프로시저란 객체의 메서드를 말하는건가요?
-
해결됨스프링 핵심 원리 - 기본편
AppConfig에 관한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 수업중에 의문점이 생겨서 질문드립니다. public class AppConfig { private MemberRepository memberRepository(){ return new MemoryMemberRepository(); } private DiscountPolicy discountPolicy(){ return new RateDiscountPolicy(); } public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(),discountPolicy()); } }객체의 인스턴스를 만들때 이렇게 정의한것과public class AppConfig { private MemberRepository memberRepository = new MemoryMemberRepository(); private DiscountPolicy discountPolicy = new RateDiscountPolicy(); public MemberService memberService(){ return new MemberServiceImpl(memberRepository); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository,discountPolicy); } }이렇게 정의했을때의 차이점이 있나요?제 생각에는 오히려 위의 경우가 Memberservice,Orderservice에서 memberRepository()를 두번 사용하니 new로 서로 다른 인스턴스가 생성되어 만약 memorymemberRepository의 저장소가 static이 아니라면 오류가 생길것 같은데 제 생각이 잘못된 것인지 궁금합니다,
-
해결됨스프링 핵심 원리 - 기본편
AutoAppConfigTest 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.Order.OrderServiceImpl' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:341) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:332) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1173) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:25) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)AppConfig에서 주석 처리도 했는데, 테스트 코드 실행시 왜 NoSuchBeanDefinitionException오류가 발생하는지 잘 모르겠습니다...
-
미해결김영한의 실전 자바 - 기본편
연산위치질문 있습니다.
객체 혹은 인스턴스는 실제 데이터가 저장된 메모리의 주소만 가지고있고, 실제 데이터는 메모리에 적재 된다 라고 이해했습니다. 맞을까요? 저장된 변수를 가져와 처리 (연산 등)을 하게 된다면 실제로 처리되는곳은 메모리상에서 데이터가 처리되는 것 일까요? 코드를 실행하면 컴파일러가 코드의 문법오류를 계산하고, class파일로 컴파일 한뒤 JVM 실행엔진에서 실행된다고 알고있는데, 데이터가 코드를 따라 연산되는곳은 실행엔진속 스택 혹은 힙 메모리 인가요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx4 문제 질문있습니다.
package scanner.ex; import java.util.Scanner; public class Ex1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int option = 0; int sum = 0; while (option != 3){ System.out.print("1: 상품 입력, 2: 결제, 3: 프로그램 종료 "); option = scanner.nextInt(); if (option == 1){ scanner.nextLine(); System.out.print("상품명을 입력하세요: "); String name = scanner.next(); System.out.print("상품의 가격을 입력하세요: "); int price = scanner.nextInt(); System.out.print("구매 수량을 입력하세요: "); int count = scanner.nextInt(); System.out.println("상품명 " + name + "가격 " +price + "수량 "+ count); sum += price * count; } else if (option == 2){ System.out.print("총 비용: " +sum); }else { System.out.println("올바른 옵션을 선택해 주세요."); } } System.out.println("프로그램을 종료합니다."); } }제가 작성한 코드값에서 항상 총비용이 +1이 되어있는데 어떤문제가 있는지 알 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
@AutoWired로 스프링 빈이 2개일때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]수업시간에 같은 타입이 2개일때 @AutoWired의 파라미터나 필드명으로 매칭하실 수 있다고 하셨는데요렇게 rateDiscountPolicy로 바꾸고 AutoAppConfigTest의 basicScan()을 돌렸는데<오류 코드>org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Spring\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy 똑같이 UnsatisfiedDependencyException 오류가 나네요 ㅜㅜ
-
미해결스프링 핵심 원리 - 기본편
XmlAppContext() 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 오류 로그는 다음과 같습니다. org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [appConfig.xml] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:351) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:319) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:184) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:220) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:191) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:253) at org.springframework.context.support.GenericXmlApplicationContext.load(GenericXmlApplicationContext.java:130) at org.springframework.context.support.GenericXmlApplicationContext.<init>(GenericXmlApplicationContext.java:70) at hello.core.xml.XmlAppContext.XmlAppContext(XmlAppContext.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: java.io.FileNotFoundException: class path resource [appConfig.xml] cannot be opened because it does not exist at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:215) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342) ... 11 more ```class path resource에서 appConfig.xml을 찾을 수 없다고 하는데, 보시는 바와 같이 있습니다. 참고로 테스트 코드도 다음과 같습니다. package hello.core.xml; import hello.core.member.MemberService; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import static org.assertj.core.api.Assertions.assertThat; public class XmlAppContext { @Test void XmlAppContext() { ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml"); MemberService memberService = ac.getBean("memberService", MemberService.class); assertThat(memberService).isInstanceOf(MemberService.class); } } ``` 어떤 부분이 문제일까요...
-
미해결스프링 핵심 원리 - 기본편
콘솔에 스프링 실행 시 로그가 안뜹니다.
안녕하세요 스프링 3.2.0을 쓰고 있습니다.강사님처럼 스프링 실행 시이러한 로그들이 안뜨고, MemberApp이나 OrderApp을 실행하면이런식으로 뜨는데 스프링 버전 차이에서 오는 것일까요..?교안에도 이렇게 나와있어서요. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
질문있습니다.
조회한 빈이 모두 필요할 때 List,Map을 이용하는 문제입니다. package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); System.out.println("discountCode = " + discountCode); System.out.println("discountPolicy = " + discountPolicy); return discountPolicy.discount(member, price); } } } 여기서 policyMap과 List에 주입되는 과정이 이해가 안갑니다. Map은 왜 <String,DiscountPolicy>로 정의했고 List는 <DiscountPolicy>로 정의 했는지, 그리고 여기에 어떻게 Ratediscountpolicy와 Fixdiscountpolicy가 들어갔는지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 시 빈 중복 에러 발생
안녕하세요! 섹션 6 중 컴포넌트 스캔과 의존관계 자동 주입하기 강의 관련 질문 드립니다.OrderServiceImpl@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DisountPolicy disountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DisountPolicy disountPolicy) { this.memberRepository = memberRepository; this.disountPolicy = disountPolicy; } ... }(DisountPolicy 는 처음 클래스 명 설정할 때 오타가 나서 그냥 그대로 쭉 사용하고 있습니다..) AutoAppConfig를 생성한 후 각 클래스에 @Component 어노테이션을 붙여줬고, OrderServiceImpl 클래스에 @Autowired를 통해 의존 관계를 주입하는 과정에서Could not autowire. There is more than one bean of 'DisountPolicy' type.Beans:discountPolicy (AppConfig.java)rateDiscountPolicy (RateDiscountPolicy.java) 에러가 발생합니다. 원인을 찾아보니 같은 타입의 빈이 여러 개 존재해서 발생하는 에러라고 하는데, 제 코드에서 어떤 부분이 잘못된건지 모르겠어서 질문 드립니다.. AutoAppConfigpackage Hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration @ComponentScan ( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } AppConfig@Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DisountPolicy discountPolicy() { return new RateDiscountPolicy(); } }