java파일을 테스트해보고 싶은데 "Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:" 라는 에러가 뜨면서 java파일을 열어보아도 실행 아이콘이 뜨질 않습니다. 원인을 찾기 위해 검색을 해보아도 어떤 오류 떄문에 이러한 에러가 뜨는지를 몰라서 해결을 못하고 있습니다ㅠ 최대한 스스로 해결하려 찾아보고 아래처럼 시도 해보았습니다. - spring initializr사이트에서 필요한 파일을 선택 후 다운 - setting에서 Build and run using 이랑 Run tests using을 InteliJ IDEA로 설정 및 JDK는 11버전 적용 - project structrue에서 project SDK도 11버전 선택 하지만 이렇게 해보아도 실행이 되질 않습니다... 도움 부탁드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님. 강의를 이제 듣게 되는 학생입니다. 다름이 아니라, 제가 선생님께 배운 내용을 필기한 부분이랑, 코드분석 내용물을 출처를 명확히 표시한다면 블로그에 올려도 되나 여쭤보고 싶어서 질문을 올렸습니다. 저작권 상으로 문제가 된다면 아예 비공개로 올리거나, 따로 모아두려고 하는데 ... 답변 받는거랑 상관없이 열심히 듣겠습니다. 감사합니다.
안녕하십니까 ! 여러 질문과 응답을 보고 @Configuration이 붙지않은 DicountService를 스프링빈으로 등록 하는 과정에 대한 의문을 해결하는 도중 질문이 생겼습니다. 혹시 그렇다면 DiscountService 빈은 기존 클레스를 상속받은 바이트 코드가 아닌, 순수 객체로 빈이 등록되는 것 입니까?
콘솔로 찍어봤는데요. 마지막에 setRedo, setBonus를 하면 render가 두 번 실행될까요? '내가 뭘 잘못했지?'하고 강의 트니까 0:37 부분부터 랜더링 하면서 콘솔 찍히는데 제로초님도 getWinNumber가 마지막에 두 번 따닥! 호출되더라고요. 그 뜻은 render가 두 번 따닥 호출된거죠. 클래스 컴포넌트는 안 그러는데 함수 컴포넌트만 이러네요... 왜 불필요한 랜더링이 되는지, 어떻게 잡아야하는지 궁금합니다.
이클립스에서 인텔리제이로 넘어가고 싶어서 인탤리제이를 써보려 기초강의를 들으면서 설치까지 진행을 했습니다. java파일을 테스트 하고 싶은데 "Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:" 라는 에러가 뜨면서 실행 아이콘이 뜨질 않습니다. 원인을 찾기 위해 검색을 해보아도 어떤 오류 떄문에 이러한 에러가 뜨는지를 몰라서 해결을 못하고 있습니다ㅠ 최대한 스스로 해결하려 찾아보고 아래처럼은 시도를 해보았습니다. - spring initializr사이트에서 필요한 파일을 선택 후 다운 - setting에서 Build and run using 이랑 Run tests using을 InteliJ IDEA로 설정 및 JDK는 11버전 적용 - project structrue에서 project SDK도 11버전 선택 하지만 이렇게 해보아도 실행이 되질 않습니다... 혹시나 이런 경우 어떻게 해보아야 할지 아시는 분있을까요ㅠㅠ도와주세요
안녕하세요 이제 거의 강의가 끝나가네요 ㅠ 그라파나관련 질문이 있습니다. 대쉬보드 설정을 맞게 한거같은데 데이터를 불러오지 못하는것 같습니다. Data sources: 프로메테우스 설정정보 apigateway-service 에 대한 cpu, memory used 이런 차트는 잘 나오는데 requests served 의 데이터 표시, success api gateway의 차트는 N/A 또는 No data라고 뜨는데 원래 값이 안나오는 것이 맞는지 아니면 뭔가 잘못된 것인지 잘모르겠습니다. (프로메테우스에서 spring_cloud_gateway_requests_seconds_count값을 넣었을때 값이 있으면 나와야 하는것 아닌가요?)
안녕하세요 선생님 강의를 진행하던도중 에러를 만나 해결해보려 하였으나. 해결이 되지않아 질문드립니다. 해당오류를 검색하여 해결방법을 찾아본 결과 1. 엔티티의 fetch 가 lazy로 되어있으면 생긴다고 하여 EAGER로 바꾸어 보았지만 해결하지못해 질문드립니다. 오류코드입니다. 2021-07-26 23:48:13.214 ERROR 6092 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order["orderItems"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem["item"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI["hibernateLazyInitializer"])] with root cause com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order["orderItems"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem["item"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI["hibernateLazyInitializer"]) at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1277) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:400) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1512) ~[jackson-databind-2.11.4.jar:2.11.4] at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006) ~[jackson-databind-2.11.4.jar:2.11.4] at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454) ~[spring-web-5.3.5.jar:5.3.5] at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) ~[spring-web-5.3.5.jar:5.3.5] at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-5.3.5.jar:5.3.5] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.5.jar:5.3.5] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.5.jar:5.3.5] at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.44.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.5.jar:5.3.5] at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.44.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.5.jar:5.3.5] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.5.jar:5.3.5] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.5.jar:5.3.5] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.5.jar:5.3.5] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.5.jar:5.3.5] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.5.jar:5.3.5] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 여기서부터는 POSTMAN에 뜨는 오류입니다. "timestamp" : "2021-07-26T14:48:13.221+00:00" , "status" : 500 , "error" : "Internal Server Error" , "trace" : "org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order[\"orderItems\"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem[\"item\"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI[\"hibernateLazyInitializer\"])\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:460)\n\tat org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104)\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)\n\tat org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:626)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:834)\nCaused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order[\"orderItems\"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem[\"item\"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI[\"hibernateLazyInitializer\"])\n\tat com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)\n\tat com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1277)\n\tat com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)\n\tat com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71)\n\tat com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33)\n\tat com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)\n\tat com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)\n\tat com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)\n\tat com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)\n\tat com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)\n\tat com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)\n\tat com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)\n\tat com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)\n\tat com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)\n\tat com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)\n\tat com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:400)\n\tat com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1512)\n\tat com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006)\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454)\n\t... 48 more\n" , "message" : "Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order[\"orderItems\"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem[\"item\"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI[\"hibernateLazyInitializer\"])" , "path" : "/api/v1/simple-orders" "timestamp" : "2021-07-26T14:48:13.221+00:00" , "status" : 500 , "error" : "Internal Server Error" , "trace" : "org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order[\"orderItems\"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem[\"item\"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI[\"hibernateLazyInitializer\"])\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:460)\n\tat org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104)\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)\n\tat org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:626)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:834)\nCaused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order[\"orderItems\"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem[\"item\"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI[\"hibernateLazyInitializer\"])\n\tat com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)\n\tat com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1277)\n\tat com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)\n\tat com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71)\n\tat com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33)\n\tat com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)\n\tat com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)\n\tat com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)\n\tat com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)\n\tat com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)\n\tat com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)\n\tat com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)\n\tat com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)\n\tat com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)\n\tat com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)\n\tat com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)\n\tat com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:400)\n\tat com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1512)\n\tat com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006)\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454)\n\t... 48 more\n" , "message" : "Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.domain.Order[\"orderItems\"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.domain.OrderItem[\"item\"]->jpabook.jpashop.domain.item.Item$HibernateProxy$RxqT9FxI[\"hibernateLazyInitializer\"])" , "path" : "/api/v1/simple-orders"
따라하다 동영상 썸네일 부분에서 자꾸 이 에러가 뜨는데 '전체적인 틀과 MongoDB연결'파트의 질문답변 봐도 도저히 해결이 안됩니다 안돼서 강사님이 올려주신 완성본으로 테스트 해봤는데요, 루트와 client에 npm install, multer install ffmpeg install npm install fluent-ffmpeg 까지 인스톨 했는데도 계속 이게 뜹니다 너무 답답해요 ㅠㅠㅠㅠ ......미칠것 같아요 bycryptjs 변경도 해보고 global 어쩌구 하는 것도 깔아봤다가 오히려 꼬이기만 하는것 같아 다른 새 컴퓨터에 강사님 코드로 해봤으나 안됩니다... 몽고 db 아이디와 비밀번호 다 맞구요 ffmpeg 깔려있는거 맞습니다 윈도우라 환경변수 설정 다 해줬고 파워쉘에서 깔린거 확인 몇번이나 했구요.. 우선 터미널에는 [HPM] Error occurred while trying to proxy request /api/video/thumbnail from localhost:3000 to http://localhost:5000/ (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors) 이게 계속 뜨네요 썸네일 부분 할떄마다...동영상은 저장이 되는거 같은데..하....너무..힘들어요.. ㅜㅜ 왜..왜안되는걸까요..?ㅠ...
안녕하세요 선생님. 질문이 길어서 죄송합니다 ㅜㅜ. 구현 부분까지가 너무 난잡하시면, 논리부분만 답변해주셔도 정말 감사할 것 같습니다. 저는 이분검색을 이용하지 않은 채 해결하였는데요, 그냥 넘어가도 괜찮은지, 아니면 이분검색으로 해결해보고 넘어가는게 좋을지 모르겠어서 질문 남기겠습니다. ( 저는 1씩 증가시켜가며 마치 순차탐색처럼 최솟값을 확인하였지만, 선생님께서는 이분검색을 사용하여 건너뛰면서 최솟값을 확인하셨기 때문에 , 제가 해결한 방법 보다는,선생님 께서 풀어주신 방법이 시간 복잡도가 더 좋은 것 같은데요, 일단 채점 폴더는 모두 통과했습니다.) => 사실 해결 당시 이분검색을 생각하지 못했고, 저한테 좀더 직관적인 방법으로 해결하였는데, 이렇게 해결하는것이 맞는것인지도 잘 모르겠습니다. <우선 제가 해결한 논리는 이렇습니다.> * 문제의 예시처럼 1, 2, 3, 4, 5, 6, 7, 8, 9 분짜리 노래 9개가 들어왔을 때, 이를 3개의 dvd에 분배해야 한다면, 논리적으로 dvd 1개의 용량의 최솟값은 15가 된다 * 따라서 최솟값을 15로 잡고, dvd용량을 15에서 시작하여 1씩 증가시켜 가며, 입력으로 주어진 노래들을 문제 조건에 맞게 분배하였을 때, 가장 먼저 분배가 된 용량이 곧 최솟값 이다. (15, 16, 17 ... 증가시켜가며 확인해보면, 17이 나옴) <구현시 주의사항> 1. 논리적인 최솟값을 구할 때, 문제의 예시처럼 나누어 떨어지는 경우도 있지만, 그렇지 않은 경우도 고려하여, 경우에 따라 올림 연산 수행 2. 논리적인 최솟값 부터 1씩 증가시켜가며 , 실제 최솟값을 찾는 부분 구현시 주의사항 (반례의 경우) -> 저의 경우 선생님이 해결하신 과정과 유사하게 - 시간을 누적시키다가 min값과 같아지면 그 누적값을 바로 dvd에 분배하고 - 누적시키다가 min값을 초과하면, 초과하기 이전까지만 분배하고, 초과시킨 값은 , 다음 dvd에 누적 시켰습니다. -> 그런데 min값을 추과하는 경우 바로 다음 dvd에 분배하는게 아니라 i--만을 수행하여 다음 iteration에서 다음 dvd에 대입하면서 동시에 새롭게 누적시킨 값이 min을 초과하는지 검사하였습니다. -> 그러면 반례의 경우에도, 마지막 dvd에 초과시킨 모든 값들이 누적되어, 올바르지 않은 최솟값을 출력하지 않을 수 있었습니다. (참고용 코드) int main(){ int N, M; int *arr, *dvd; // *arr : 입력한 노래의 시간 저장 , dvd : M개의 dvd를 의미 int i,j; //1_1. N, M입력 scanf("%d%d",&N, &M); //1_2. arr[N] 동적할당 arr = (int*)malloc(N * sizeof(int)); dvd = (int*)calloc(M , sizeof(int)); //1_3. arr의 element를 입력받음 for(i=0; i<N; i++) scanf("%d",&arr[i]); //2_1. (arr[N]의 element의 합 / M) 를 수행하여, 이론적으로 가능한 DVD하나의 최소 용량을 구함 int min, mod; int sum=0; for(i=0; i<N; i++) sum += arr[i]; mod = sum % M; // case 1. 나누어 떨어지는 경우 (후처리x) if(mod == 0) min = sum / M; // case 2. 나누어 떨어지지 않는 경우 -> 올림 수행 else min = (int)(((double)sum/(double)M)+1); //2_2. 이후 이론적으로 가능한 최솟값 부터 시작하여 1씩 증가시켜 가며, 실제 가능한 DVD 하나의 최소 용량을 구함 int cnt; int sub_sum; int idx; while(1){ cnt = 0; // 분배한 횟수를 count하기 위한 변수 sub_sum = 0; //실제 분배하기 전, 각 노래 시간의 합 idx = 0; // dvd배열에 접근하기 위한 index // dvd 배열 초기화 과정 for(i=0; i<M; i++) dvd[i] = 0; // 각 노래를, 최솟값 min값을 기준으로 dvd에 분배 // 마지막 M-1번째 dvd에 분배할 차례가 아닌 나머지의 경우 // -> 각 노래 시간을 누적시켜 가다가, // i) 누적시킨 sub_sum값이 최솟값 min과 같으면 -> 그대로 분배하고 cnt++ // ii) 누적시킨 sub_sum 값이 최솟값 min보다 크게 되면 -> 초과한 시간은 제외하고 나머지 누적값을 분배 후 cnt++ // 이때 i--도 진행하여, 초과시킨 값은 다음 dvd에 분배한다 // 마지막 M-1번째 dvd에 분배할 경우 //앞에서 M-2번째 dvd까지만 분배한 이후, 분배하지 못한 시간들을 모두 누적하여 M-1번째 dvd에 분배 for(i=0; i<N; i++){ sub_sum += arr[i]; if(cnt < M-1){ if(sub_sum == min){ dvd[idx++] = sub_sum; sub_sum = 0; cnt++; } else if(sub_sum > min){ dvd[idx++] = sub_sum - arr[i]; sub_sum = 0; cnt++; i--; } } if(i == N-1){ dvd[idx++] = sub_sum; } } // 최솟값 min에 따라 분배했을 때, 확인 과정 // : 각 dvd에 분배된 시간이 최솟값 min을 초과하였으면 -> 최솟값을 증가시켜 다시 분배해야 함. // 그렇지 않고 모든 dvd에 min값 이하의 시간으로 분배되어 있으면 -> 그때 min이 곧 실제 최솟값 for(i=0; i<M; i++){ if(dvd[i] > min) break; } if(i==M) break; else min++; } ///3. 최소 용량 출력 printf("%d\n", min); free(arr); free(dvd); return 0; }
1. 비즈니스로직에 SQL 이 섞이는 SQL 의존 문제를 해결하는 방법을 생각해보세요. 스프링 프레임워크의 `layered-architecture` 참고하자면, DB와 연관되는 부분들은 `Repository` 로 뺍니다. 이 부분을 흔히 `Repository Pattern` 이라 하는데 이렇게 함으로써 디비를 사용하는 쪽은 `Repository` 안에서 처리하고 비즈니스 로직은 해당 값을 온전히 쓰는식으로 개발하면 될 것 같습니다. 2. 한번 생성한 Connection 객체를 재사용해야 하는 이유를 생각해보세요. DB 연결과 같은 경우에는 계속해서 재사용하는 부분이기 때문에 싱글톤으로 둬서 재사용을 함으로써 시스템 자원을 효율적으로 다루기 위함. 3. DB 에 데이터를 저장할때 휴대폰 번호 같은 민감정보는 암호화를 해야 합니다. 암호화 기능은 어디에 구현해야 하는지 생각해보세요. 이 부분은 제 생각에는 Framework에서 실제 암호화가 필요한 부분을 사용하고자할 때 사용해야된다고 생각합니다. 저희 코드로 보면 `SqlRunner` 에서 `HP_N` 을 업데이트하는 부분에서 사용자에게 받은 `param` 을 담기 전에 암호화를 수행하고 담은 다음에 처리를 해야된다고 생각합니다. 그 이유는 일단, DB 함수로도 암호화 처리가 가능하지만 이는 코스트를 높기 때문에 최대한 이러한 처리는 암호화가 필요한 DB의 UPDATE나 INSERT 시에 처리하는게 맞다고 생각합니다. 이 부분에 대해서 제로님께서는 어떻게 생각하시는지 궁금합니다. 4. SQL 은 데이터를 가공하는 DML, 스키마를 정의하는 DDL 그리고 DB 를 제어하는 DCL 로 구분합니다. 그리고 우리가 만든 SQL 기능은 DML뿐만 아니고 DDL, DCL 도 사용 가능합니다. 하지만 WAS 에선 DDL 과 DCL 사용을 금지해야 하는데 이유와 해결방법을 생각해보세요. DDL, DCL을 사용하면 안되는 이유는 일단 웹어플리케이션 특성 상 불특정 다수가 사용할 수 있는 서비스들이 존재합니다. 이 때문에 만약 DDL 중에서도 `ALTER` 나 `TRUNCATE` 와 같은 치명적인 쿼리를 날릴 경우에 서비스 장애가 날 수 있다고 생각합니다. DCL같은 경우에는 트랜잭션 관련된 질의와 권한 관련 질의가 있는데 권한 질의 (REVOKE, GRANT)의 경우에는 만약 db 접속 권한이 넘어가게 될 경우에 서비스에 치명적인 구멍이 될 수 있다고 생각합니다. 또한, 트랜잭션 질의인 (COMMIT, ROLLBACK)도 기존에 우리가 만들었던 transaction의 기능과 혼동의 소지가 있다고 생각합니다. 이를 막기 위해서는 WAS에서 접속하는 DB 계정의 권한 설정을 `GRANT SELECT, UPDATE, DELETE, INSERT ON EMP TO db-user` 이런식으로 둬서 필요한 권한만 사용하게끔 하는 것이 좋다고 생각합니다. 5. 트랜잭션직렬성은 우선순위가 부여된 여러개의 트랜잭션이 동시에 병행/병렬수행되더라도 결과는 순서대로 실행됨을 의미합니다. 하지만 트랜잭션직렬성이 보장되더라도 트랜잭션이 서로 얽혀 종료가 안되는 데드락이 발생할 수 있는데 프레임워크에서 이를 해결할 수 있는 방법에 대해 생각해보세요. 이 부분이 이번 섹션에서 가장 어려웠던 질문이었던 것 같습니다. 저는 이 문제를 봤을 때 키워드 2개를 떠올렸습니다. 1. Transaction Propagation 2. Locking or Transaction Isolation-level 처음에는 2번이 뭔가 맞을 것 같았는데 프레임워크에서 이를 해결할 수 있는 방법이라 하셔서 1번같기도하고? (Spring은 Propagation 설정을 지원하니..) 뭔가 2번은 DB로 처리하는 부분이고, 이 설정은 Spring Data JPA에서만 지원하니 1번같다는 느낌을 받았습니다. 혹시 모르니 제 생각을 적어보겠습니다. 1번과 같은 경우에는 스프링에서는 기본 값이 `REQUIRED` 로 되어있는 것으로 알고 있습니다. 전 회사에서는 스프링 like한 자체 프레임워크를 사용했었는데 이러한 복잡한 부모 <-> 자식 트랜잭션간의 처리가 어렵다보니 TPS가 중요했던 서비스가 아니였어서 `REQUIRES_NEW` 처럼 항상 트랜잭션을 새로 생성하여 독립성을 보장하는 식으로 작업을 했었습니다. 이렇게 되면 각각의 트랜잭션들의 독립성이 보장되니 데드락같은 문제를 해결할 수 않을까 조심스럽게 생각해봤습니다. 2번과 같은 경우에는 라킹을 통해서 트랜잭션을 보장하는 부분이라고 볼 수 있습니다. 전파는 트랜잭션이 묶이게 할껀지 아니면 독립적으로 볼 지에 대한 내용이라면, 라킹은 동시성에 대한 내용이라고 생각합니다. mysql, mariadb는 `REPATABLE-READ` 가 기본값으로 세팅되어 있는데 조회된 내용이 항상 동일함을 보장할 수 있습니다. 그래서 제로님께서 해주신 질문의 의도는 데드락과 관련이 있고, 동시성과 관련이 있어보여서 이 부분이 좀 더 맞지않을까 생각이 드는데 잘 모르겠네요 ㅠㅠ 근데 이는 프레임워크에서 처리한다는 개념보다 뭔가 DB에서 설정하는 느낌이라 혹시 위의 2개가 아니라 다른 의도를 가지고 질문을 하셨던건지 궁금합니다. 번외. 현재 필요한 것 보다 과하게 제품을 디자인 하는 것을 오버엔지니어링 이라고 합니다. 우리가 개발시 사용하는 인터페이스클래스가 오버엔지니어링이 되는 경우가 있는데 이를 생각해보세요. 이 부분의 인터페이스 클래스가 정말 자바의 인터페이스를 뜻하는 건지 아니면 큰 개념의 인터페이스인지를 제가 이해를 못했어서 두 가지 모두 생각해보았습니다. 1. 자바의 인터페이스의 오버엔지니어링 케이스 이 경우에는 구현하려는 인터페이스에 너무 많은 메서드가 있는 경우라고 볼 수 있을 것 같습니다. 이를 테면 자동차의 `Tire` 라는 인터페이스가 존재하는데 타이어교체하기() 타이어공기압체크() 타이어크기() 타이어수명() 등.. 사용하지 않을 메서드들이 많은 경우에 오버엔지니어링이지 않을까 생각이 듭니다. 2. 소프트웨어 관점에서의 Interface 오버엔지니어링 케이스 소프트웨어 관점에서 보면 인터페이스는 아이폰으로 치면 볼륨업, 볼륨다운, 전원버튼과 같이 필요한 부분만 노출 시키고 내부 구현은 사용자에게 모르게끔 하는 부분이라고 볼 수 있습니다. 이러한 케이스의 오버엔지니어링 케이스는 사용자에게 필요 없는 정보까지 노출되거나 (캡슐화 위반) 사용자가 의도치 않게 쓸 수 있는 부분이 노출되어 있거나 (휴대폰으로 치면 이상한 버튼이 있는데 이걸 누르면 공장초기화가 된다던가?) 이러한 부분이라고 생각합니다. 지금까지의 예제에서는 현재는 SqlRunner가 `SQLiteJDBCTransaction` 을 사용하는데 실제 WAS 상에서 쓰기 위한 `SQLitePoolTransaction` 을 위한 코드들이 `SqlRunner` 상에 있습니다. 물론, 실제 사용될 코드이긴하나 만약 우리가 `SQLiteJDBCTransaction` 만 사용한다고 생각하면 이 부분이 오버엔지니어링이라 볼 수 있을 것 같습니다. 중요한 점은 이는 확장을 위한 설계이기 때문에 만약에 확장이 안된다는 가정이 있어야할거같은데 약간 어거지로 지금까지 예제로 적어보았습니다 ㅎㅎ;
안녕하세요. 강의듣는도중 질문 사항이 있어서 문의드립니다. MemberController에서 create 함수를 만들때 MemberForm form을 파라미터로 넣어서 view 단에서 받는 name값을 넣어서 사용한다고 하셨는데 이전에 domain 폴더에 만들었던 Member를 사용하면 안되는지 문의드립니다. id를 제외하고 name 변수는 겹쳐서요. MemberForm과 Member 객체가 사용되는 방식이 비슷한것 같아서 문의드립니다.! 감사합니다.
[하루 10분|Web Project] HTML/JS/CSS로 나만의 심리테스트 사이트 만들기
퀄리티 높은 강의를 무료로 제공해주셔서 감사합니다. 강의를 듣다가 궁금한 점이 생겨서 글 남깁니다. 화면전환 파트 강의를 듣는데 자바스크립트를 이용해서 display none이랑 block을 통해 화면 전환하는 방법이 나오는데 아예 html을 새로 만들어서 버튼을 눌렀을때 두번째 html로 링크해주어 화면을 전환하는 방법도 있는걸로 알고있는데 어느게 더 일반적인가요? 감사합니다
loss_function에서 label값으로 사용되는 P 에 tf.one_hot 이 적용되는데, 이 때 tf.one_hot 의 첫 번째 argument는 모든 label class가 할당되어야 하지 않나요? code에서 label[4] 는 특정 단일 class의 label number값을 가지고 있어 반환값이 항상 [0, 0] 으로 나옵니다. 만일 class가 1개가 아니라 2개..또는 3개라면 num_class가 2일 때 P 의 값은 [0, 1] 또는 [1, 0]의 값이, num_class가 3일 때 P 의 값은 [0, 0, 1] 또는 [0, 1, 0] 또는 [1, 0, 0]의 값이 사용되어야 한다고 생각하는데 맞을까요? C값에는 IOU값을 주셨는데, 결국 C값은 object loss가 계산되는 과정에서 best box mask가 1인 cell의 위치에서만 사용이 될 것이고(나머지는 0의 값이기 때문), 해당 cell의 C값은 1이기 때문으로 이해해도 괜찮을까요? 만약 제가 이해한 것이 맞다면, C = 1을 할당해도 괜찮다고 봐도 될까요?
[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
안녕하세요 몽고DB내에서 index를 유용하게 쓰는 예시로 'text' 타입 index관련 부분 검색 기능만 알려주셨는데, 근본적으로 ascending, descending index 등 index는 왜 필요한건가요 ? 그리고 각 필드에 대한 index를 만든다는 것 자체가 무슨 뜻이죠 ? 가령 '직업'이라는 필드에 descending index를 만들면 무슨 일이 일어나고 언제 그걸 쓸 수 있는거죠?