묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver 직접 사용과 ExceptionResolver들 간의 관계
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]API 예외 처리.pdf 강의 자료에서 아래 내용에 대해 문의드립니다."지금까지 다음 ExceptionResolver들에 대해 알아보았다.ExceptionHandlerExceptionResolver → 다음 시간에ResponseStatusExceptionResolver → HTTP 응답 코드 변경DefaultHandlerExceptionResolver → 스프링 내부 예외 처리지금까지 HTTP 상태 코드를 변경하고, 스프링 내부 예외의 상태 코드를 변경하는 기능도 알아보았다.그런데 HandlerExceptionResolver를 직접 사용하기는 복잡하다.API 오류 응답의 경우 response에 직접 데이터를 넣어야 해서 매우 불편하고 번거롭다.ModelAndView를 반환해야 하는 것도 API에는 잘 맞지 않는다.스프링은 이 문제를 해결하기 위해 @ExceptionHandler라는 매우 혁신적인 예외 처리 기능을 제공한다.그것이 아직 소개하지 않은 ExceptionHandlerExceptionResolver이다." 이때까지 ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver에 대해 공부했습니다.관련 애노테이션을 붙이거나, 관련 예외 클래스 (ex REsponseStatusException 등) 을 사용하면 스프링이 자동으로 예외 코드 및 메시지를 설정해서 예외 처리해주는 걸로 이해했습니다.DefaultHandlerExceptionResolver는 애초에 스프링 내부적으로 발생한 예외 처리이므로 개발자가 별도 구현할 필요가 없고요... 그런데 갑자기 "HandlerExceptionResolver를 직접 사용하기는 복잡하다.API 오류 응답의 경우 response에 직접 데이터를 넣어야 해서 매우 불편하고 번거롭다." 이 얘기가 나온 맥락이 이해가 가질 않습니다. 혹시 ResfponseStatusExceptionResolver, DefaultHandlerExceptionResolver를 사용하기 위해서는 HandlerExceptionResolver를 직접 구현 해야하나요? 전 강의에서 HandlerExceptionResolver 인터페이스를 구현한 구현체 클래스도 실행됐다고 생각해야하나요? 제가 지금 강의 쭉 듣고나서, 자료 보면서 다시 복습 중이라.. 조금 기억이 가물 가물하네요 ㅠㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController 부분 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내용이랑 똑같이 다 따라쳤고 확인도 해봤는데 머 때문에 오류 뜨는지 모르겠어요 ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC 실용적인 방식 강의듣고 질문 있습니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위와같이 강의 따라서 @getMapping("/new-form") 이렇게만 해줘도 HTTP GET 메서드만 받을 수 있도록 제약할 수 있고, URL 매핑까지 된다는 걸 배웠는데요,@GetMapping("/new-form")이렇게 @GetMapping 다음에 괄호를 열고 매핑할 url을 넣어주고 괄호를 닫으면 된다는 걸 저는 @GetMapping 소스코드에서 방법을 알려주는지 궁금했습니다./* * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.web.bind.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; /** * Annotation for mapping HTTP {@code GET} requests onto specific handler * methods. * * <p>Specifically, {@code @GetMapping} is a <em>composed annotation</em> that * acts as a shortcut for {@code @RequestMapping(method = RequestMethod.GET)}. * * <p><strong>NOTE:</strong> This annotation cannot be used in conjunction with * other {@code @RequestMapping} annotations that are declared on the same method. * If multiple {@code @RequestMapping} annotations are detected on the same method, * a warning will be logged, and only the first mapping will be used. This applies * to {@code @RequestMapping} as well as composed {@code @RequestMapping} annotations * such as {@code @PutMapping}, {@code @PostMapping}, etc. * * @author Sam Brannen * @since 4.3 * @see PostMapping * @see PutMapping * @see DeleteMapping * @see PatchMapping * @see RequestMapping */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = RequestMethod.GET) public @interface GetMapping { /** * Alias for {@link RequestMapping#name}. */ @AliasFor(annotation = RequestMapping.class) String name() default ""; /** * Alias for {@link RequestMapping#value}. */ @AliasFor(annotation = RequestMapping.class) String[] value() default {}; /** * Alias for {@link RequestMapping#path}. */ @AliasFor(annotation = RequestMapping.class) String[] path() default {}; /** * Alias for {@link RequestMapping#params}. */ @AliasFor(annotation = RequestMapping.class) String[] params() default {}; /** * Alias for {@link RequestMapping#headers}. */ @AliasFor(annotation = RequestMapping.class) String[] headers() default {}; /** * Alias for {@link RequestMapping#consumes}. * @since 4.3.5 */ @AliasFor(annotation = RequestMapping.class) String[] consumes() default {}; /** * Alias for {@link RequestMapping#produces}. */ @AliasFor(annotation = RequestMapping.class) String[] produces() default {}; }그래서 위와같이 @GetMapping 소스코드를 확인했는데, 뚜렸하게 방법을 알려준다는 건 제가 찾지 못했는데 혹시 제가 못찾는 것일까요? 아니면 제일 첫 줄에 있는 "Annotation for mapping HTTP GET requests onto specific handler methods." 이 문장으로 @GetMapping에 값을 그대로 적어주면 된다(괄호를 열고 url쓰고 닫으면 된다)고 알아들어야 하려나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
DB 테스트 코드 작성에서 .containsExactly에 관한 질문
안녕하세요! 섹션 4 강의를 보다보니 의문점이 생겨서요 Repository를 테스트하는 과정에서 test() 메서드에 .containsExactly를 사용하고있습니다.강사님께서 내용과 순서가 모두 맞아야 한다고 설명하시더라고요. 메모리에서의 테스트나 DB를 조회할 때 순서를 보장할 수 없는 것으로 알고있는데 문제가 있을 수도 있지만 간단한 테스트를 위해서 사용한것인지 아니면 실제로도 이런식으로 테스트 하는지 궁금합니다.관련한 질문들을 확인했으나 만족할만한 답변이 없어서 질문드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
해당 강의에서 말하는 정상흐름이 어떤걸 의미하시는걸까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]10:56 쯤 정상흐름으로 바뀌었다고 하셨는데, 이게 예외 발생 시 막.. ExceptionResolver들에 의해 처리되거나WAS한테 아예 예외가 넘어가거나 등등예외에 대한 흐름으로 이어져야 하는데. 마치 예외가 발생하지 않은 것 처럼즉, 요청 성공시의 흐름으로 바뀐다는 의미인가요? 정상 흐름의 정확한 의미를 잘 모르겠습니다 ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ResponsStatusException 클래스를 이용한 에러 처리 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ResponsStatusException 클래스를 언제 쓰는건지 잘 모르겠습니다. 강의 예제에서 다음과 같은 코드를 작성하셨습니다. ```java @GetMapping("/api/response-status-ex2") public String responseStatus{ throw new ResponseStatusException(HttpStatus.NOT_FOUND,"error.bad", new IllegalArgumentException); } ``` ResponseStatusException 클래스를 사용하는 이유를 잘 모르겠습니다. IllegalArgumentException을 직접 컨트롤할 경우 code와 message를 변경할 수 없으니까 ResponseStatusException 클래스를 사용하는게 맞나요? 그리고 실제로는 IllegalArgumentException이 발생하지 않았는데, api/response-status-ex2 로 요청을 보냈을 뿐이고 실제로 예외가 발생한 것도 아닌데, illegalArgumentException 예외를 던지는 매커니즘이 이해가 안갑니다....
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
libs가 없습니다... ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]hello-spring파일까지 이동한 후 gradlew.bat을 입력해서 실행했는데요 BUILD SUCCESSFUL이라고 떴습니다. 그 후 cd build해서 들어간 후 dir을 입력하니까 libs라는 폴더는 없네요... 이유가 뭘까요 ㅠㅠ께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용]hello-spring파일까지 이동한 후 gradlew.bat을 입력해서 실행했는데요 BUILD SUCCESSFUL이라고 떴습니다. 그 후 cd build해서 들어간 후 dir을 입력하니까 libs라는 폴더는 없네요... 이유가 뭘까요 ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 Live Reload 기능
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 설명해주신것 같은데 찾기가 힘들어서요.. 서버 재시작 없이 타임리프 뷰 수정한것 바로 웹 브라우저에 반영하는 방법 알려주심 감사하겠습니다..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field="*{open}"질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]랜더링전<input type="checkbox" th:field="*{open}" class="form-check-input"/>랜더링후<input type="checkbox" class="form-check-input" id="open" name="open" value="*{open}"/> th:field를 사용하여 강의에서 배운대로 위와 같은 랜더링 결과를 기대했으나실제 랜더링된 페이지 코드를 보니 아래와 같이 id="open"이 아닌 id="open1"이 적용되었습니다.<div>판매 여부</div> <div> <div class="form-check"> <input type="checkbox" class="form-check-input" id="open1" name="open" value="true"/> <input type="hidden" name="_open" value="on"/> <label for="open" class="form-check-label">판매 오픈</label> </div> </div>그럼 label의 for과 input의 id를 맞추기 위해서 저런 경우 th:field를 사용한다고 해도 id를 작성해야 하나요??아니면 다른 방법이 있을까요? 긴 글 읽어주셔서 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
필터가 디폴트로 DispatcherType.REQUEST만 세팅되어 있으면 에러 요청시 필터를 거치치 않는 것 아닌가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 강의를 잘못 이해한걸수도 있습니다.. 제가 이해하기론 sendError 호출 시 요청 사이클을 내부적으로 한번 더 타는 것이 문제라고 이해했습니다. 필터를 무시하는 방법으론 filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST와 같이 필터 설정을 하면 된다고 이해했습니다. 그런데 애초에 디폴트로는 REQUEST 만 설정되는거라면, 필터 사이클을 한번 더 안타는게 맞지 않나요 ? 에러 페이지 요청할 때는 DispatcherType이 ERROR인채로 요청되니까.. 그렇다면 강의 초반에 설명해주실때, 클라이언트 요청과 별개로 에러 요청할 때 한번 더 필터 사이클을 탄다고 하신건지 이해가 조금 안됩니다 ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링부트의 톰캣과 스프링 컨테이너 구조에 대한 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.스프링 핵심 원리를 듣고, 이제 스프링 MVC 강의에서 서블릿 컨테이너에 대한 강의를 들었는데요.제가 지금까지의 내용을 종합했을 때 이해한 게 맞는지 궁금해서 질문 올립니다~많이 미흡하지만ㅠㅠ 위와같이 그림을 그려봤는데요.스프링 프레임워크 내부에 내장 톰캣 서버인 WAS와 스프링 컨테이너(IoC 컨테이너) 이렇게 크게 2가지로 구성되어있다고 이해했는데 맞을까요? 그리고 위의 그림처럼 WAS인 내장 톰캣 서버 내부에 서블릿 컨테이너가 있는게 맞을까요?그래서, 하나의 Request가 왔을 때 > WAS인 톰캣에서 Request와 Response 객체를 생성하고 > 그 객체들을 서블릿 컨테이너에 있는 서블릿 객체에 전달하고 > 스프링 컨테이너에 빈으로 등록된 Controller 객체에 넘겨서 비즈니스 로직을 진행하고 > 리턴을 다시 서블릿 컨테이너로 넘겨서 HTTP 응답까지 내보낸다고 이해하면 될까요? 그리고, 최초 로딩 시점에 서블릿 객체가 생성되는 기준이 /hello 이렇게 path 별로 생성이 되는걸까요? 그렇다면 만약 HelloController에 3개의 다른 path 메서드가 있다면 > 3개의 서블릿 객체가 생성되나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ComponentScan, @Component가 아닌, @WebFilter, @ServletComponentScan을 사용하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Filter에 @ComponentScan, @Component를 사용하지 않고 @ServletComponentScan, @WebFilter를 사용하는 이유는 스프링 컨테이너보다 서블릿 컨테이너가 먼저 실행되기 때문인가요? 즉, WAS(Tomcat 등)가 실행되면 먼저 서블릿 컨테이너가 올라가고, 이때 @WebFilter로 등록된 필터가 자동으로 등록되기 때문에, 스프링 컨테이너가 관리할 수 없어서 서블릿에서 제공하는 @WebFilter, @ServletComponentScan을 사용하는 것이 맞을까요? 근데 그렇게 될 경우 @Configuration은 스프링 컨테이너가 관리하는건데... WebConfig 클래스는 어떻게 되는건지 잘 모르겠네요 ㅠ ㅠ 최대한 명확하게 질문드리고 싶은데.. 아직 개념자체를 이해 못해서.. 쉽지 않네요 죄송합니다 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 의존성 주입 코드 질문.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]13:10 부터 시작하는 DI에 관한 코드 내용중 질문있습니다.14:15 강의에 따르면MemberService 클래스에서 만든 MemoryMemberRepository 와 MemberServiceTest 에서 new 하여 만든 것은 MemoryMemberRepository는 각각 다른 인스턴스겠죠. 같은 레포지토리여야 하는데 다른 레포지토리니까 추후에 문제가 생길 수 있다구 하시구요.여기까지는 강의대로 이해가 갑니다.그런데 이에 해결책으로 작성하신 의존성 주입 코드가 잘 이해가 가지 않습니다.public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } ... }class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } ... }이렇게하면 매 테스트 실행하기 전에 beforeEach()가 실행되고 MemoryMemberRepository를 각각 생성하고 MemberService에 넣어준다고 하시는데요,제가 여기서 이해가 안가는건.. 이것도 결국 매번 MemoryMemberRepository를 생성하는 것이니 전부 다른 인스턴스로 생성 되는 것 아닌가요? 그러니까 지금 문제가 MemberService 클래스와 MemberServiceTest 에서 사용하는 MemoryMemberRepository가 원래는 하나로 사용 해야하지만 각각 new로 생성하여 다른 인스턴스로 사용하여 문제가 되기에 그것을 해결하려는 것이잖아요? 그런데 이번에 생성자를 통해서 MemoryMemberRepository를 매번 생성하여 넣는 것도 결국 또 각각의 인스턴스를 생성하여 넣는것 아닌가요? 이해가 잘 안가요ㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Spring은 무조건 MVC인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 여기까지 강의가 MVC에 관한 내용인데..이게 디자인 패턴같은데 Spring은 무조건 MVC를 사용하나요? 아니면 다른 디자인 패턴도 사용을 하나요?MVVM 같은거요
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
'강의 준비를 위한 VSCode'에서 질문
이렇게 되어있고, 아나콘다가 설정이 안되어 있으면 제가 바꿔도 되는건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
RestControllerAdvice 메서드 public vs private
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ExConrollerAdvice 설명해주실때 메서드를 public 으로 선언하였는데 private 로 설정하여도 잘 동작하는데 public 일 필요가 있나요?? 해당 부분을 public 으로 선언하면 유지보수하기 좋다는데 어떤 부분에서 그런건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이에서 실행이 안됩니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. > Task :prepareKotlinBuildScriptModel UP-TO-DATECould not resolve: org.springframework.boot:spring-boot-starter-thymeleafCould not resolve: org.springframework.boot:spring-boot-starter-webCould not resolve: org.springframework.boot:spring-boot-starter-test[Incubating] Problems report is available at: file:///C:/hello-spring/build/reports/problems/problems-report.htmlDeprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.12.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD SUCCESSFUL in 1s이러한 오류가 떠ㅏ서 진행을 못하고 있습니다. 2일째 고생중인데 도와주세요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핵심원리, MVC강의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]핵심원리 강의에서는 스프링 컨테이너와 스프링 빈 중점으로 배웠고 appconfig를 이용해서 설계했습니다. MVC강의에서는 서블릿을 배우며 어떻게 html이 작동되는지 배웠습니다. 근데 저는 여기서 MVC는 왜 appconfig를 이용하지 않았을까라는 궁금함이 생겼고, MVC에서 핵심원리에 배웠던게 많이 나오지만 핵심원리에서 배운 복잡한 구조를 MVC에서는 사용을 안해도 되는걸까라는 의문점이 생겼습니다. 당연한 소리일 수 있겠지만 혼란스러워 질문을 드립니다. 감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
edit부분에서 @ModelAttribute 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @ModelAttribute Item item) { itemRepository.update(itemId, item); return "redirect:/basic/items/{itemId}"; } @ModelAttribute Item item을 사용하게 되면 Model을 추가하는 기능과 model.addAttribute("item", item);을 자동적으로 실행한다고 배웠습니다. 그렇게 되면 모델에 담겨있던 기존 요소의 정보가 업데이트 되는게 아니라 그대로 있고, 기존의 요소를 업데이트 하려했던 item의 정보까지 추가적으로 보내지는거 아닌가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
edit부분에서 @ModelAttribute 궁금한게 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @ModelAttribute Item item) { itemRepository.update(itemId, item); return "redirect:/basic/items/{itemId}"; } @ModelAttribute Item item을 사용하게 되면 Model을 추가하는 기능과 model.addAttribute("item", item);을 자동적으로 실행한다고 배웠습니다. 그렇게 되면 모델에 담겨있던 기존 요소의 정보가 업데이트 되는게 아니라 그대로 있고, 기존의 요소를 업데이트 하려했던 item의 정보까지 추가적으로 보내지는거 아닌가요?