24%
65,180원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
api 응답으로 map 사용을 지양하는 이유
안녕하세요 호돌님유쾌하고 유익한 강의 잘 듣고 있습니다.강의 중 api 응답 값으로 map<String ,String>을 넘겨주는 대신에 내부 클래스나, ErrorResponse등 클래스를 넘겨주는 방식을 사용하셨는데요제목처럼 응답 값으로 map의 사용을 지양하는 이유가 궁금합니다.무튼 강의 감사합니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
소스코드 정리된거 없나요?
소스코드만 따로 받을 수 없나요? 이때까지 강의를 정주행 하면서 느낀거지만 준비를 완벽히 하고 찍은거 같지 않아 동영상과 같이 해보면서 스킬을 늘리는데에 힘이 드네요
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
부끄럽지만 아래 글을 읽고도 PostEditor의 목적을 잘 모르겠습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래 글의 답변을 읽고 이해한 바로는 반드시 title과 content를 모두 가져오기 위해 (해당 프로젝트에서 그렇게 하기로 협의가 되어있으므로) PostEditor를 사용해서 title과 content를 강제하는 목적으로 만들었다는 뜻으로 이해했는데요 그게 그냥 response용으로 만든 Edit이라는 DTO 객체에 NotEmpty를 쓰는 것과 무엇이 다른가요? 오히려 분산함으로써 관리만 더 번거로워진 게 아닌가 하는 생각이 들어서요.. 아니면 해당 예제는 간단하게 만든 것이라 별다른 차이를 느낄 수 없는 것이고 추후 확장성을 고려해서 요구사항이 늘어날 때 Post 엔티티를 오염시키거나 서비스 - 레파지토리 사이의 DTO에 대한 역방향 의존성을 주지 않고 도메인 계층에서 로직을 해결하기 위해서 분리한 건가요? 아직 아는 게 별로 없어서 질문의 핀트를 잡지 못해 다소 장황하게 질문 드린 점 죄송합니다 ㅜ 짧은 답변이라도 주신다면 정말 감사하겠습니다!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
JPA 관련 질문입니다. 기본적인 질문이라 선죄송...
강의 잘 듣고 있습니다. (그랜절) 다 듣고 수강평을 쓸 예정이지만, 중반이상 본 지금도 매우 만족흡족하면서 옆에서 개발지도해주는 느낌으로 잘 해나가고 있습니다. 게시글 수정쪽 와서 전반적인 구조와 설계를 살펴볼 겸 만지작 거려 봤는데 괜히 이 친구가 눈에 밟혀서... '왜 final 이지?' 라는 생각으로 final을 날려봤습니다. private final PostRepository postRepository; 근데 에러가 좌라라라라라라랅 메세지는 아래처럼 postRepository를 주입받지 못해서 null 이란거 같은데 Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "com.in2l.in2Leisure.api.repository.PostRepository.save(Object)" because "this.postRepository" is null org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "com.in2l.in2Leisure.api.repository.PostRepository.save(Object)" because "this.postRepository" is null at app//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) 다시한번 제 기본기 없음을 한탄하며, 제가 아는 (써오던) final은 그저 더이상 바꾸기 싫을때 final이라는 단편적인 생각이고 JPARepository를 상속받은 postRepository가 final은 왜 필요하고, final이 없으면 왜 주입을 못받는건지 모르겠습니다.... (아니면 주입의 문제가 아닌건가요? 설마....) 너무 근본, 근원, 기본적인 질문이라 적절한 설명이 있는 블로그나 강의가 있으면 알려주셔도 어마무시 감사합니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
단위 테스트는 통과하는데 전체 테스트를 통과를 못하고 있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 호돌맨님 강의를 들으면서 저도 따라 만들고 있는데.. 강의의 PostController Test에 해당 하는 부분에서 문제가 발생 했습니다. 각각의 단위 테스트는 통과를 하는데 Controller 전체를 돌려보면 문제가 발생하네요 @BeaforEach를 써서 clean 메소드도 구현 한 상태이고 @BeforeEachvoid clean() { writeRepository.deleteAll();} 각 각 테스트에 테스트가 끝나면 queryDSL로 DB를 삭제해주는 쿼리를 넣어줘도 같은 문제가 일어납니다. 디버깅을 해봤을때 class WriteService 부분의 (강의 PostService에 해당) public List<WriteResponse> getList(WriteSearch writeSearch) { List<WriteResponse> collect = writeRepository.getList(writeSearch).stream() .map(write -> new WriteResponse(write) ) .collect(Collectors.toList()); return collect; 이 부분에 writeId가 기존의 값에 +2가 되서 나오고 있습니다. (원래 writeId에 30이 출력 되어야 하는데 writeId 32가 출력이 됩니다. 단위 테스트 할때는 제대로 출력이 되는것을 확인 했습니다. ) 오늘 내내 고쳐보려고 했는데 해결 방법이 안보이네요... 어떻게 고쳐야 할지 도와주시면 감사하겠습니다. * 추가 Pageable pageable = PageRequest.of(page, 5, Sort.Direction.DESC, "writeId"); 이 부분을 구현 하기전에 원래 write_Id였는데 writeId로 고쳤습니다. 이 부분에 문제가 생겼는지 쿼리를 보면 writeId로 생성 하는것이 아닌 write_Id로 테이블을 만들어졌습니다. 해당 문제도 writeId로 고치고 나서 발생하는 것 같습니다.
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
컨트롤러 테스트시 size 없이 전달할때 npe
안녕하세요 호돌맨님! 이번 영상을 다 실습하고 컨트롤러 테스트시에 size값을 주지 않는 경우를 테스트 해봤더니 npe가 발생하더라구요 오류는 PostSearch 클래스에 @NoArgsConstructor @AllArgsConstructor 두 어노테이션을 붙여서 해결했는데요 정확한 오류의 원인이 무엇인지 궁금해서 질문드립니다 서비스 테스트에서는 @Builder.Default 어노테이션을 사용한 초기값 설정이 잘 됐습니다 컨트롤러 테스트에서만 이 오류가 발생하는 원인이 궁금합니다 서비스 테스트에서는 postSearch 객체 생성 후 postService.getList() 메서드에 전달했는데요 빌더로 객체 생성시 클래스내에 생성자가 없었으니 롬복이 @Builder 어노테이션이 붙은 클래스에 암묵적으로 @AllArgsConstructor를 만들고 필드 값을 주입하는 시점에 초기화가 된건가요? 이유가 궁금합니다!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
페이징 정렬 문의
이전 페이징 섹션에서 Pageable로 조회할때는 정렬 기본 조건이 ASC 라 순차적으로 조회되는거는 이해 했는데요, QueryDSL에서 PostSearch를 이용한 페이징에서는 정렬 조건이 없는데 기본이 DESC 인거 같습니다. 어디서 설정되는지요..? 이 부분도 기존 Pageable과 같이 id 1번 값부터 나올꺼라 기대했었습니다. 추가로 PostSearch에 페이징 조건만 들어가 있는데 보통 조회 조건 필드 Condition 클래스와 Paging 관련 클래스를 상속해서 사용할까요? PostSearch 처럼 다른 도메인 조회/페이징 처리할때마다 동일하게 페이지 관련 정보를 입력할꺼 같지는 않아서요. 감사합니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
빌더의 장점
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 빌더 관련 설명에서 궁금한점 질문 드립니다. 빌더 장점 중 객체의 불변성 이야기 해주셨는데요, 멤버변수 final로 선언하고, 만약 변경 시 빌더를 이용해서 새로운 객체를 리턴하는것을 말씀하시는 걸까요? 감사합니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Exception code, message 관련 질문
안녕하세요. 강의 내용 정리하다가 궁금한점 아래 캡쳐하여 질문드립니다. 제가 포인트를 잘못 잡고있을까요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
페이징처리 관련 질문
안녕하세요 호돌맨님! 강의를 들으며 따라하고 있었는데 조금의 예외를 주니 오류가 발생하여 문의드립니다. 페이징 처리 도중 @Builder.Default를 통해 기본값 처리를해서 get /posts를 할때 인자값을 주지 않아도 페이지 1과 10개의 값을 가져오도록 하셨는데 테스트에서 /posts만 넘겨주니 null 포인트 오류가 발생하더라구요. 따로 디버깅을 통해 getSize()나 getPage()를 통해 확인해보니 값이 null로 설정 되어있었습니다. 혹시 이부분에 해결방법이 있을까요?
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
objectMapper 를 이용한 테스트 시 오류.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.tpoluol.request.PostCreate]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.tpoluol.request.PostCreate` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:199) at com.tpoluol.controller.PostControllerTest.test(PostControllerTest.java:50) 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:1541) 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:1541) 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.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.tpoluol.request.PostCreate]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.tpoluol.request.PostCreate` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:388) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ... 87 moreCaused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.tpoluol.request.PostCreate` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1904) at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1349) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1415) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:351) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) ... 101 more test() 를 돌렸을때 이러한 오류가 발생해서 질문 올립니다. NestedServletException HttpMessageConversionException InvalidDefinitionException 와 같이 표시된 예외들을 검색해서 찾아보았지만, 해결할 수 가 없어 질문 올립니다..
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
메서드 호출 시 static import는 거의 필수적인 건가요?
영상 보니 라이브러리에서 가져오는 메서드들을 static으로 빼시더라구요. 저는 하면서 느끼는게 어디서부터 온 메서드인지 헷갈리는 경우가 있더라구요. (ex) MockMvc 에서 가져오는 get 메서드나 RestDocumentationRequestBuilders.get 등등 다른 개발자들과 협업 시 static으로 빼는게 일반적인지 궁금합니다..!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
restDoc 사용시 보안부분이 궁금합니다!
안녕하세요 호돌맨님 ! 열심히 강의듣고 있는 수강생입니다 서비스회사로 옮기고나서 처음으로 API를 만들어보고 있는데요! 배포시 jar 파일에 RestDoc파일이 같이 배포될 됐을때엔드포인트가 외부노출이 됐을때 api 스펙이 모두 노출될 것 같아 걱정되는데요 라이브서버에 같이 배포 안하고 따로 배포하면 될까요 ??
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
spring initializr 가 없으면 플러그인에서 받으면 되나요??
spring initializr 가 없으면 플러그인에서 받으면 되나요?? 맥과 윈도우 차이인지 인텔리제이 버전 차이 인지는 모르겠는데 프로젝트 생성부터 많이 다르네요 ㅠㅠ
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녀하세요 질문이 있습니다.
안녕하세요 강의 잘보고 있습니다. 궁금증이 있어 질문 남기게 되었습니다. 예시 상황) 1)게시글 목록 보기 -글 제목 -글 작성자 -글 작성날짜 2)게시글 상세보기 -글 제목 -글 작성자 -글 내용 -글 작성날짜 -조회수 1.각 작업에서 위와 같은 데이터를 내려준다고 가정할 때, 실무에서는 응답용 DTO를 각각 만들어서 사용하는 편인가요?? (위와 같이 간단할 경우와 필드수가 무수히 많을 경우 2가지 상황 모두에 대한 말씀을 해주시면 감사하겠습니다) 1-1 . 만일 따로 만들지 않을 경우. 예시 상황) private String 제목; private String 내용; private String 작성자; pirvate LocalDateTime 작성날짜; private Integer 조회수; 만일 위와 같이 하나의 DTO로 처리할 경우, 목록 보기에서는 조회수와 내용이 필요하지 않습니다. 이때 postman으로 조회해보면 , 내용 필드와 조회수 필드는 필요하지 않기 때문에 초기화 해주지 않았으므로 , 필드는 표시되고 값은 null로 표시됩니다. 혹여 이때 , 클라이언트 입장에서는 이게 필요한 데이터이지만 , 선택적값이라서 null인건가와 같은 착각을 일으키지 않을까 생각이 듭니다. 이럴 경우 어떤식으로 대처하시는지요??
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
toEditor 메소드를 사용하는 의미가 잘 와닿지 않습니다 강사님!
Post클래스를 사용하지 않고 PostEditor 클래스를 만들어서 이 클래스에 수정하고 싶은 내용들을 필드로 담아두면 이 클래스는 수정하려는 클래스 이다 , 여기에 있는 필드들은 수정이 가능하다 라는 의미를 다른개발자분들에게 의미부여 할 수 있을것 같은데요! toEdit 메소드가 없이 그냥 PostEditor 클래스에 빌더 패턴으로 생성자를 만들어 save 로 사용하면 될 것 같은데 굳이 toEdit 메소드를 만드신 의미가 어떤건지 궁금합니다!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
예외처리 부분에서 질문이 있습니다.
안녕하세요 강의 잘 듣는 과정에서 질문 있는데요!! User user = optionalUser.orElseThrow(IllegalStateException::new); 이처럼 코드를 작성을 해준 부분이 강의 초반부에 나옵니다. 10분 35초 쯤이요 이를 위한 핸들링을 예전 시간에 강의를 해준 ExceptionController 에서 예외 처리를 해줘도 상관없나요?
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
assertj를 쓰지 않으시는 이유가 있으신지 궁금합니다.
스프링을 처음 배울땐 assertj를 쓰도록 배웠는데 취향의 영역인지 아니면 안쓰시는 이유가 있으신지 궁금합니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Optional과 @NotBlank는 무슨 차이인가요?
안녕하세요. null 체크 하실 때 @NotBlank 라는 어노테이션을 붙여서 에러메시지가 나오도록 하셨는데 Optional 도 null 이 넘어올 시, null point exception이 발생하지 않도록 체크해주는 것으로 알고 있습니다. @NotBlank 와 어떤 차이가 있는 것인지 궁금합니다. 혹시 제가 놓치고 있는 부분이 있다면 짚어주시면 감사드려요.
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
이 강의에서 말한 더 고치고싶은 부분이 궁금합니다.
말씀하신 더 고치고 싶은 부분을 얘기해주면 어떻게 고칠 수 있을지 고민해볼 수 있을 것 같습니다.