이번에 다루신 문제에는 입력이 작았기 때문에 for문 내부에서 sort를 해도 문제가 없었다고 생각합니다. 그러나 코딩테스트 경험상, for문안에 sort()를 넣으면 대부분 시간 초과 오류가 났던 경험이 있는데요. 첫째, 입력이 더 큰 경우에 이 방식(매번 정렬)을 써도 되는지 둘째, 만약 시간 복잡도가 너무 커져서 시간초과가 날 가능성이 높다면 더 효율적인 방법은 없을까요?
9:17초에서 changeTeam 함수를 보다가 문득 질문이 들어 질문 남깁니다. 함수명 자체는 팀을 '바꾼다'는 의미를 가지고 있는데 list에 add를 해주는 방식(team.getMembers().add(this))으로 구현하셨습니다. 그러면 리스트에 있던 기존 데이터객체의 jpa에서 알아서 update되는지, 아니면 무시하고 새로 add 되는지 궁굼합니다.
안녕하세요 영한님! 로드맵대로 잘 배웠습니다 감사합니다!! 배운걸 이용할겸 작은 프로젝트를 하나 하려고 하는데, 이전에 mvc 로 게시판을 jpa 와 querydsl 로 만들어보려구 jsp 파일을 사용하려고 하니 thymeleaf 형식으로 바꾸기가 어렵더라구요.. ㅜ.ㅜ 그래서 그냥 아예 첨부터 view를 짜봐야겠다고 생각이 들었는데 스프링 부트는 여러가지 뷰가 있고 jsp, velocity, thymeleaf가 대표적인 것 같은데 어떤 것을 개인적으로 추천하시는지 알고 싶습니다.
안녕하세요. 강의에 나온대로 진행 후 테스트 수행하니 아래와 같이 오류가 납니다. 무슨 문제일까요? java.lang.ExceptionInInitializerError at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org.junit.platform.commons.util.ReflectionUtils.newInstance(ReflectionUtils.java:511) at org.junit.jupiter.engine.execution.ConstructorInvocation.proceed(ConstructorInvocation.java:56) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.api.extension.InvocationInterceptor.interceptTestClassConstructor(InvocationInterceptor.java:72) 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:77) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:333) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:280) at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:77) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:262) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:256) at java.base/java.util.Optional.orElseGet(Optional.java:369) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:255) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:108) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:107) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:71) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248) at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211) at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) Caused by: org.testcontainers.containers.ContainerLaunchException: Container startup failed at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:322) at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:302) at com.etopia.studyolle.infra.AbstractContainerBaseTest.<clinit>(AbstractContainerBaseTest.java:10) ... 63 more Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageNameFuture=java.util.concurrent.CompletableFuture@28486680[Completed normally], imagePullPolicy=DefaultPullPolicy(), dockerClient=LazyDockerClient.INSTANCE) at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1265) at org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:600) at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:311) ... 65 more Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration at org.testcontainers.dockerclient.DockerClientProviderStrategy.lambda$getFirstValidStrategy$3(DockerClientProviderStrategy.java:163) at java.base/java.util.Optional.orElseThrow(Optional.java:408) at org.testcontainers.dockerclient.DockerClientProviderStrategy.getFirstValidStrategy(DockerClientProviderStrategy.java:155) at org.testcontainers.DockerClientFactory.getOrInitializeStrategy(DockerClientFactory.java:113) at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:134) at org.testcontainers.LazyDockerClient.getDockerClient(LazyDockerClient.java:14) at org.testcontainers.LazyDockerClient.listImagesCmd(LazyDockerClient.java:12) at org.testcontainers.images.LocalImagesCache.maybeInitCache(LocalImagesCache.java:68) at org.testcontainers.images.LocalImagesCache.get(LocalImagesCache.java:32) at org.testcontainers.images.AbstractImagePullPolicy.shouldPull(AbstractImagePullPolicy.java:18) at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:62) at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:25) at org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:20) at org.testcontainers.utility.LazyFuture.get(LazyFuture.java:27) at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1263) ... 67 more
안녕하세요 영한님! 지난 질문에서 " pathvariable을 이용해주지 않았는데 자동으로 MemberSearchCondition안에 어떻게 들어가게 되는지 궁금합니다." 다 라고 질문을 드렸었는데, 이 부분이 정확히는 스프링 데이터 JPA 에서 배운 queryString으로 파라미터를 넘겨서 그 값이 도메인 클래스 컨버터 기술로 인해 바로 들어가는 것이 맞나요 ?
fish = 5 while True: num = int(input("고등어 몇 개를 구매하실 건가요?")) if fish >= num: fish = fish - num print(f'고등어 {fish}개 남았습니다.') if fish == 0: print('완판되었습니다.') break else: print(f'손님, 죄송하지만 구매할 수 있는 고등어 {fish}개 남았습니다.') fish = 0 break 위 예제에서 이 코드대로 실행이 된다면 5마리일 때 6마리를 구매하겠다고 하면 바로 남은 생선이 0마리가 되어버리는 것 아닌가요? else: print(f'손님, 죄송하지만 구매할 수 있는 고등어 {fish}개 남았습니다.') 이렇게 되어야 완판 될때까지 판매를 하는 것 아닌가요?
제가 실습중인 환경은 SpringBoot 2.3.1.RELEASE여서 error: cannot find symbol 위 오류가 발생했는데, 코드 수정해서 해결했습니다. 참고하시면 도움될것같습니다. package jpabook.jpashop.member; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional // @Rollback(false) 테스트 종료 후 데이터를 롤배하지 않고 그대로 남겨두는 옵션 public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("1hoon"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then assertEquals(findMember.getId(), member.getId()); assertEquals(findMember.getUsername(), member.getUsername()); assertEquals(findMember, member); } }
안녕하세요. 그 사이 cgv 페이지 구조가 바뀌었는지 그냥 접속했을때와 아이프레임 소스 주소 따서 접속했을때 보여지는 페이지가 다릅니다. http://www.cgv.co.kr/theaters/?areacode=01&theaterCode=0013&date=20200718 http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx?areacode=01&theatercode=0013&date=20200718 아이프레임 소스 주소로 연결되는 페이지에는 imax관이 포함되어 있지 않아서 강의를 따라갈수가 없네요. 페이지 구조가 어떻게 바뀐건지 잘 모르겠습니다.
안녕하세요. 방금 막 완강을 마친 학생입니다. 우선 수업 정말 잘들었습니다. jpa와 함께, 지금까지 배웠던 것을 쭉 다시 복습하고, 2편으로 넘어갈 생각입니다. 이번 질문은 다름이 아니라, 지금 서버를 재시작하면 기존의 데이터가 삭제되고 데이터가 새로 쓰이잖습니까. 이게 application.yml의 ddl-auto:create 때문인지 그래서 테이블을 서버를 run할 때마다 새로 생성하기 때문인지, 아니라면 기존 데이터를 db에 유지하는 방법을 알고 싶습니다. 더 좋은 질문을 가져올 수 있도록 복습하겠습니다. 감사합니다.
안녕하세요 영한님 findOrders() 메서드 질문 있습니다!! 앞에서부터 쭉 내용을 봤더니 머릿속이 굉장히 꼬인 것 같네요 ㅎㅎ; 앞서 V3.1 에서 페이징 한계 극복에 사용한 메서드 findAllWithMemberDelivery 는 to One 을 페이징에 영향을 주지않기 때문에 페치조인을 하였습니다. DTO에 직접 적용하는 V4의 경우 findOrders 메서드를 사용하였는데 이 때에도 to One 을 먼저 조인을 시켰습니다. 여기서 궁금한 점이, 이 때에는 왜 fetch 조인을 사용하지 않은 것인지 궁금합니다. 그리고 어째서 lazy 인데도 불구하고 1건으로 조회가 되는지 궁금합니다. Select o from Order o 만 하면 lazy이기 때문에 Order만 조회가 되지만 위의 경우는 join 을 해주었기 때문에 delivery와 member가 같이 조회가 되는 건가요? lazy인데 어떻게죠? 만약 그렇다면, findAllWithMemberDelivery() 메서드에서는 굳이 fetch를 왜 시켜준건지도 아리송합니다. 그냥 join해도 toOne 이니깐 row수를 증가시키지않고 딱 되지 않나요 ?? 이해했던게 막 꼬이네요 ㅜㅜ
10 in (10,20,30), (2) in (10,20,30), (1,2) in (10,20,30) 강의에서 위 코드를 실행하였을 때 (True, False, False)가 나왔는데 제가 아래 코드를 실행했을 때에 10 in (10,20,30), (20) in (10,20,30), (10,20) in (10,20,30) (True, True, False) 가 나왔습니다. 리스트의 경우에는 [2]를 in 구문으로 할 수 없지만 튜플에서는 (20)을 튜플로 인식하는 것이 아닌 그냥 숫자로 인식을 해서 True가 나오는 건가요?
안녕하세요. 강의를 다 듣고 복습을 하는데 여전히 좀 헷갈리는 부분이 많습니다ㅠㅠ 1. Converter, Formatter Registry는 메소드의 파라미터로 들어온 값들을 저장하는 공간 같은 것 인가요?? 2. WebConversionService가 Converter, Formatter registry를 상속받고 있으면, Registry의 메소드를 사용하지 않고 그냥 WebConversionService만 사용해도 registry의 파라미터를 받아서 변환할 수 있나요? 아니면 Converter, Formatter registry의 메소드를 이용해서 각각 파라미터를 저장 후 WebConversionService가 사용하는 방식인가요?
안녕하세요 영한님 며칠 비 내렸더니 선선한 요즘이네요 ㅎㅎ API에 대해 궁금한 점이 있어 질문 드립니다. 이 강의 이후에도 api 에 대해 계속해서 다루게 되는데, 어떤 형식의 데이터를 가지고 있는지 api의 기준 같은 것이 실무에서 프로젝트 별로 딱 정해져있는건가요? 결과를 필요로 하는 개발자가 이런 데이터가 나오게끔해서 만들어주세요~ 하면 이제 그것에 맞춰 개발을 하게 되는 것인지 궁금합니다.