안녕하세요. 좋은 강의 잘 듣고 있습니다. 이번 강의의 @GetMapping, @PostMapping을 보면서 문득 궁금증이 생겨 질문하게 됐습니다. 결론부터 말하자면 편리함은 성능과 트레이드 오프된 결과물이 아닐까? 라는 생각이 들었습니다. 이런 생각을 한 이유는 다음과 같습니다. @GetMapping을 타고 들어가보면 강의에서 말씀하신 것처럼 @RequestMapping(method=RequestMethod.GET)이 존재합니다. 즉, @GetMapping이라는 어노테이션을 만들기 위해 @RequestMapping + a의 코드가 작성된 것이죠. 여기서 @RequestMapping 대신 @GetMapping을 사용하므로써 코드가 깔끔해지고, 가독성이 좋아지고, 개발자가 편리하다라는 등의 이점이 생깁니다. 그런데 앞서 말했다시피 실질적인 코드는 +a가 됐으니 코드량과 코드의 동작은 오히려 늘어난 것 아닌가라는 생각이 듭니다. 그렇다면 성능적인 측면에서는 효율이 더 안좋아진 것이 아닐까? 이런 생각이 들었습니다. 더 확장해 보자면, 앞서 강의에서 들었던 프레임워크를 개선하는 과정이나 배민의 문구를 소개해 주셨던 부분을 돌이켜 보면, 어떤 것을 업그레이드 하고, 누군가에게 편하게 제공하기 위해 다른 곳에 많은 작업이 생긴다면 비슷한 맥락에서 편의와 성능이 트레이드 오프 된 것은 아닌지에 대해 궁금해서 질문 남기게 됐습니다. 감사합니다.
3:58초 전에 위와 같은 코드를 짰는데 @Autowired public OrderServiceImpl (MemberRepository memberRepository , DiscountPolicy rateDiscountPolicy) { //System.out.println("OrderServiceImpl"); this . memberRepository =memberRepository ; this . discountPolicy =rateDiscountPolicy ; } org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\zzang\Downloads\java\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:16) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) 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:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) 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.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) 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:1540) 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:1540) 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:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) 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:71) 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:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1790) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1346) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ... 83 more 오류가 나오는데 어디서부터 잘못된걸까요ㅠㅠ AutoAppConfig의 문제일까요.. 링크는 여기로 들어가시면 됩니다! https://drive.google.com/file/d/1B-JBgat07YrT12wD7DvbG2ysnRKa8WfR/view
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요.. Cascade에 관련하여 문의드립니다. order 객체에서 orderItems리스트에 Cascade를 ALL로 사용 하는것을 보았습니다. 일정 order의 엔티티를 삭제하면 연관된 orderItems 삭제될텐데, 이때 item입장에서 해당 주문상품(OrderItem)을 조회하는 경우가 생길때, order 객체에서 orderItems 리스트객에 Cascade ALL 대신 CASCADE PERSIST 만 선언해서 자동적으로 ORDER가 ORDERITEMS 리스트에 있을 때 같이 저장만되도록 사용해도 되는건지 ITEM입장에서도 연관이 되어 CASCADE 자체를 사용하면 안되는건지 궁금합니다. 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] JSP 파트에 있는 회원목록까지는 표시가 되는데 그 이후인 서블릿 mvc부터 회원가입 페이지는 표시가되는데 회원목록 페이지 표시가 안되고 404오류 메시지가 표시됩니다 https://drive.google.com/file/d/13OqZsRXRyLl4WjsKcAfFjRM0pK0COWCB/view?usp=sharing 구글드라이브에 올렸습니다. 헤매더라도 강의를 이어나가다보면 해결될줄 알고 또 다른 수강생분들이 질문하셨던 부분에서 답을 찾으려 했는데도 못찾아서 이렇게 남깁니다 확인 부탁드리겠습니다
안녕하세요. 강의듣고 테스트코드를 작성하는 중 해결하지못한 의문이 생겨서 질문남깁니다. 파일을 저장하는 테스트코드를 Mockito를 사용해서 작성했는데 테스트코드이기 때문에 코드만 동작하고 파일이 저장이 안되길 바라는데 바램과는 다르게 파일이 저장이 되더군요. 심지어 테스트코드라서 경로가 지정이 안되있다보니 src와 같은 위치에서 MockMultipartFile로 임시로 넣은 데이터로 만들어진 파일이 생성이 됩니다. 테스트 코드를 실행시킬 떄마다 생성되는 문제라서 생성이 안되도록 하거나 테스트코드위치에 static폴더를 만들어서 전부 모아볼려고 해봤는데 둘 다 실패했습니다... 제가 방법을 잘못 찾고있는건지, 그렇다면 어떻게 해결할 수 있을지 알고싶습니다.
다음과 같이 DFS 함수를 작성하는 것도 괜찮은 방법일까요? def DFS(L): global cnt if L == n_size: for x in result_list: print(x, end='') print() cnt += 1 return else: for i in range(L, n_size): if n[L] != '0' and 65 <= int(n[L: i+1]) + 64 <= 90: result_list.append(chr(int(n[L: i+1])+ 64)) DFS(i+1) result_list.pop()
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 영한님 현재 querydsl을 사용하여 where 조건이 복잡한 동적 쿼리를 구현중입니다. 현재 구현중인 기능에 데이터 조회를 하는 조건을 관리하는 기능이 있어서 조건을 데이터베이스에 저장하고 데이터베이스에서 조건을 가져와서 repository에서 BooleanBuilder로 각 조건을 조합하여 쿼리를 날리고 있습니다. 제가 궁금한건 Entity에서 어차피 조건을 가지고 있으니 Entity에서 바로 BooleanExpression을 만들어 repository로 전달해주는게 어떤가 하는 생각입니다. 그런데 이렇게 Entity에서 바로 BooleanExpression을 반환하자니 querydsl 의존이 domain에 걸리는거 같아서 조금 걱정입니다. 영한님은 Entity나 DTO가 queryDsl 객체에 의존을 가지는 것에 대해서 어떻게 생각하시나요.?
안녕하세요! coco_annotations_mask_visuals에서 coco.getCatIds()는 해당 category id별로 한개의 img id를 임의로 출력한다고 하셨는데 catNms를 다른걸로 줘서 해봤는데 결과가 여러 개가 나옵니다 ! 어떻게 된건지 잘모르겠어서 질문남겼습니다!
[D.P.2(DappProject2)] 디앱 프로젝트2(Klaytn 네트워크를 활용한 NFT 생성 및 판매)
해결된 문제이긴 하지만 궁금해서 글을 남겨봅니다. 제가 마주한 문제는 import "MintGemToken.sol"을 했을때 제대로 import 해오지 못해서 컴파일 에러가 지속되었던 문제입니다. 이걸 import "./MintGemToken.sol"로 바꾸니 바로 해결되었어요 서로 같은 폴더에 MintGemToken과 SaleGemToken이 있음에도 불구하고 이러한 에러가 발생하는이유가 궁금합니다. 원인 중 짐작가는건 제 진행중인 프로젝트폴더에 두 스마트컨트랙트 파일이 최상위 폴더에 있지 않고 contracts 폴더에 있다는게 인강 내용과는 차이점이네요. 읽어주셔서 감사합니다!
안녕하세요 제품테이블의 사용 여부가 'Y' 인 값 만을 정크 테이블로 구현하려 합니다 하기와 같이 제품목록을 전체적으로 가져오는 부분에서는 문제가 없지만, 제품테이블의 사용여부를 필터로 걸 수 있는 방법이 있을까요? 파워쿼리를 통한 별도의 유효제품 테이블 생성이 아닌 새테이블 DAX 식을 활용한 방법이 있을지 안내 부탁 드립니다 VAR 제품 = CROSSJOIN ( ROW ("Type", "제품목록"), VALUES ('제품테이블'[제품명]) ) RETURN UNION ( 제품, ... ... )
함수형으로 연습을 많이 하고 있는데 재귀는 어떻게 표현해야 하는지 잘 모르겠습니다.. 예를들면 const breadcrumb = () => { let path = ""; (function recur(file) { path = "-" + file.getTitle() + path; if (file.parent) recur(file.parent); })(file); path = path.slice(1); return path; }; 이런 코드가 있다고 하면 어떻게 함수형으로 작성할 수 있을까욤..?
삼각형이 만들어지기 위해선는 가장 짧은 두 변의 합이 가장 긴 변의 합보다 커야한다는 점에 착안해 AND 연산자를 이용해서 풀어봤습니다! (정삼각형 제외) function findTriangle ( a , b , c ) { let answer ; if ( a + b > c && b + c > a && c + a > b ) answer = ' YES! ' ; else answer = ' NO! ' ; return answer ; } findTriangle ( 6 , 7 , 11 ) ;