[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. API 강의에서 @ResponseBody를 이용해 JSON 으로 객체를 변환받는 내용의 코드에서 name이 너무많아 반환받는 JSON 키를 "name2"로 변경해보고싶어 코드와 url등등 name2를 넣어 계속 실행해봣지만 계속 키는 "name"에서 변하지가 않습니다. 어디를 변경해야 하는걸까요??
섹션4_Model추가 V3 강의 내용 중 FrontControllerServletV3 클레스 에서 해당 render 메서드의 파라미터 mv.getModel()에는 createParamMap 메서드에서 만들어진 paramMap? 즉 key, value로 생성된 모든 request 값이 들어가고, view.render(mv.getModel(), request, response); 메서드 내부에 modelToRequestAttribute 메서드는 위에서 넘겨준 paramMap을 다시 request에 새팅해주는게 맞나요? 어질 어질 하네요.. ㅜㅜ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용]HttpSession에 관해서 공부한 내용을 정리해보았는데 한번 피드백해주시면 감사하겠습니다 1. 정리한 부분 getSession()을 통해 이미 생성되어있는 세션 저장소에 할당할 HttpSession 빈 세션 객체 하나를 생성 후 반환 getSession()을 통해 생성된 HttpSession 빈 세션 객체에 setAttribute()를 통하여 map 형태의 세션 정보를 저장할 수 있다. 이때 세션 정보는 (세션 이름 , 회원 정보) 로 형태로 저장되고 이 순간 해당 세션을 식별하기 위한 세션id는 톰캣에서 자동으로 생성해줌 따라서 getSession()을 통해 세션 저장소에 저장될 한 세션 객체 HttpSession의 형태를 굳이 표현해보자면 (sessiondId , Map<String , Object>)이고 , 거기다가 setAttribute()를 통해 “세션 이름”과 “회원 정보”를 지정해서 저장하면 (UD3R9A33 , (“loginMember” , member)) 형태로 저장됨 그럼 이 순간 톰캣 서버가 자동으로 Set-Cookie: JSESSIONID=UD3R9A33를 지정해서 클라이언트에 전달함 그에 따라 서버와 클라이언트 간 쿠키를 통해 자동 지정된 세션id를 통해 사용자 여부를 식별할 수 있는 것 이렇게 이해하면 될까요? 2. 추가 질문 사항 세션 저장소의 한 공간을 차지하는 한 세션 객체 HttpSession에 setAttribute()를 여러 개 호출할 수 있는데 이는 한 HttpSession 공간에서 또 여러 개의 세션 정보를 가질 수 있다고 이해하면 될까요? 만약 이가 맞다면 getSession()을 통해 여러 개의 HttpSession을 생성하는 것과 setAttribute()를 통해 한 HttpSession 안에서 여러 개의 세션을 생성하는 것의 차이가 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) YES 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) YES 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) YES [질문 내용] 여기에 질문 내용을 남겨주세요. 질문 주제 : Optional 에 대해상세 내용 : MemberService 의 조회용 메서드에서 단일 객체를 조회할 경우, 반환 타입을 Optional<Member> 로 정의하지만, List 등의 컬렉션에서는 Optional<List<Member>>을 사용하지 않고 List<Member> 이유가 궁금합니다. List에 담을 값이 없어도 List라는 객체가 반환되기 때문(null이 아니기 때문)에 괜찮은 걸까요? list.empty() 라는 메서드를 통해 조회 요청에 대해 반환할 객체가 없음을 알 수 있고, 이에 따른 후처리를 할 수 있기 때문인가요?
git 프로그램에서, code 확인 후에npx lite-server --baseDir 1-vanilla 실행하면npm ERR! code ENOENTnpm ERR! syscall lstatnpm ERR! path C:\Users\ostri\AppData\Roaming\npmnpm ERR! errno -4058npm ERR! enoent ENOENT: no such file or directory, lstat 'C:\Users\ostri\AppData\Roaming\npm'npm ERR! enoent This is related to npm not being able to find a file.npm ERR! enoentnpm ERR! A complete log of this run can be found in: C:\Users\ostri\AppData\Local\npm-cache\_logs\2024-02-24T09_12_51_599Z-debug-0.log 상기 에러메세지가 발생하는데, 혹시 어떻게 해결할 수 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) -> 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) -> 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) -> 예 [질문 내용] application.properties 에 logging.level.org .apache.coyote.http11=debug 를 설정하여 HTTP 메시지 로그를 보고자 하였으나 강의 영상처럼 출력 되지 않습니다. ↑상품명과 파일(임의의 png 이미지)을 서버로 보낸 상태 apache DEBUG 레벨 로깅 내용을 보고 싶은데 어떻게 해야하나요? [사용환경] os: win11 springBoot: 3.2.3 ide: Ultimate 2023.3.2 java: 17
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 해당 영상을 보고 나서 개발 하는 중 궁금점이 생겨 질문드립니다. WAS가 죽으면(=서버가 과부하가 되거나 어떤 요인에 의해 다운될 경우) WAS가 표출해주는 에러페이지를 보여주지 못하고 (templates 파일은 내부적으로 was만 접근 가능하기 때문) 톰캣에 기본 내장된 에러페이지를 보여준다라고 이해했습니다. 이 때, 톰캣이 보여주는 내장된 에러페이지는 에러코드 및 톰캣 버전 등 정보를 가지고 있어 보안상 위험하다고 판단이 되었습니다. 이러한 경우 정적 소스를 처리할 수 있는 web server에서 개발자가 커스텀한 에러페이지를 표출할 수 있도록 해야 될 거 같은데, 이게 가능한지 , 어떻게 설정을 해야하는지 궁금합니다. 또한 불가능하다면 어떤 다른 방식으로 위의 문제점을 해결하는지 궁금합니다. 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. member 라는 객체에 id와 name이 모두 담겨있을 텐데 hashmap 을 또 만들어서 id와 name을 맵핑시키는 이유가 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 진행중에 HelloSpringApplication 파일을 run하면 터미널에서 building중이라면서 계속 시간은 지나가는데 종료가안되요. localhost:8080 에는 진입되는데 building이 계속진행되는건 뭘까요... 정지를 누르면 아래처럼 에러메시지가 나와요. Execution failed for task ':HelloSpringApplication.main()'. > Build cancelled while executing task ':HelloSpringApplication.main()' * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. Deprecated 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.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 13s 3 actionable tasks: 2 executed, 1 up-to-date
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의에서 public MemberService memberService(){ return new MemberService(memberRepository()); } 를 사용해서 서비스와 리포지토리 빈을 서로 연결해주셨는데, 여기서 memberRepository()가 생성자니까 public MemberService memberService(){ return new MemberService(new memberRepository()); } 이런식으로 써야할 것 같은데, new가 사용되지 않아서 질문드립니다. 왜 이런 예외적인 문법이 쓰여지게 되는 것일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 17버전이라 스프링부트 3점대로 만들고 main이랑 test복사해서 프로젝트 생성후 javax를 변경까지 했습니다. 메인 애플리케이션을 실행하면 잘 되는데 테스트 코드 실행하면 이렇게 오류가 납니다 뭐가 문제일까요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. MemberService의 memberRepository에 final 키워드가 붙어야 하는 이유를 알고 싶습니다. store에는 final이 붙지 않았어서 그 둘의 어떤 차이 때문에 final이 붙을지 말지가 결정되는 것인지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx ) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG ) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @WebServlet(name = "mvcMemberServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); //Model에 데이터를 보관. request.setAttribute("member", member); String viewPath = "/WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request,response); //-> 요청의 제어권을 save-result.jsp에게 넘김 즉 요청의 흐름이 넘어감 } } 그러고 나서 jsp로 흐름이 넘어오고 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 성공 <ul> <%-- 이 부분을 request에 저장된 member 파라미터를 통해 값을 넣고--%> <li>id=${member.id}</li> <li>username=${member.username}</li> <li>age=${member.age}</li> </ul> <a href="/index.html">메인</a> </body> </html> <%--이 부분에서 최종적으로 브라우저에게 응답이 나간다.--%> 이렇게 이해했는데 맞을까요 ..? 맞다면 처음 클라이언트의 요청을 받은건 서블릿이고 최종 응답을 해준것은 jsp인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. findById는 테스트를 하지 않았지만, findByName은 테스트를 하고 있습니다. 레포지토리의 메서드 중 테스트해야하는 것과 테스트를 하지 않아야 하는 것을 구분하는 기준이 있을까요? 또 테스트 케이스를 만들어내는 방법이나 원칙이 있는지도 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 위 사진에서 StringHttpMessageConverter의 경우 미디어 타입은 별/별이라 써져 있고, 쓰기 미디어 타입은 text/plain이라고 나와 있습니다. 저는 처음에 위 부분을 다음처럼 이해했었습니다. StringHttpMessageConverter가 요청을 받을 때 사용되는 경우(파라미터가 String인 경우) 요청 메시지의 Content-Type이 무엇이든 상관없다. StringHttpMessageConverter가 응답할 때 사용될 경우에도(리턴 타입이 String인 경우) 요청 메시지의 Accept가 무엇이든 상관없다. StringHttpMessageConverter가 응답할 때 사용될 경우(리턴 타입이 String인 경우) 요청 메시지의 Accept가 특정한 거로 지정되어 있지 않다면 응답 메시지의 Content-Type이 text/plain으로 되지만, Accept가 지정되어 있다면 그에 맞는 미디어 타입(application/json 등)으로 나갈 수 있다. 원래 이렇게 생각했었는데, 다시 보니 pdf에 별/별이라고 되어 있는 미디어 타입은 요청 미디어 타입에 한정해서 써져 있는 건가?싶기도 해서 헷갈립니다. 그렇게 다시 해석한다면 StringHttpMessageConverter가 요청을 받을 때 사용되는 경우(파라미터가 String인 경우) 요청 메시지의 Content-Type은 아무 거나 상관없다. StringHttpMessageConverter가 응답할 때 사용될 경우(리턴 타입이 String인 경우) 요청 메시지의 Accept는 text/plain(혹은 이걸 포함한 별/별)이어야 하며 다른 미디어 타입은 허용하지 않는다. 전자와 후자 중 어떤 게 맞나요? 혹은 제가 쓴 양쪽 내용 다 잘못된 내용을 포함한다면 무엇인지 궁금합니다. 저는 전자일 것 같기는 합니다. 이전에 produces 관련 코드를 작성할 때 String으로 반환하는데도 produces = "text/plain"이 아닌 produces = "text/html"로 썼기 때문에요. 그런데 확신이 안 들어서 질문드립니다.
모델을 따로 분리한 이유를 request, response를 안쓰는 컨트롤러가 있어서 라고 말씀하셨는데 request를 안쓰는 컨트롤러는 Map도 안쓰고 파라미터 -> 맵 -> 파라미터로 다시 바꿔야 하는 수고로움도 있는데 v3로 만든 이유는 나중에 스프링 mvc에서 모델을 친숙하게 하기 위해서 일부로 만든건가요? 아니면 테스트 코드를 쉽게 만들기 위해서 만든건가요?
제가 지정한 경로에 파일도 업로드 되고 redirect 되는것도 확인했습니다 post요청을 보매녀 redirect되서 /items/1로 get요청을 보내는데 여기서 whitelabel 오류가 나옵니다. item-view.html에서 첨부파일: <img> 를 삭제하고 돌리면 정상적으로 뷰를 랜더링 합니다 어디서 문제가 발생한건가요?? +파일을 첨부안하면 오류가 발생안하고 파일을 첨부하면 오류가 발생합니다. 어디서 문제가 있는지 감이안오네요ㅜ
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration> 이 코드를 쓰면 DataSource 커넥션풀에서 별도의 Thread가 동작하는 코드를 볼수가 있는데 application.properties 에서 logging.level.root=debug 로 설정을하니까 안보이더라구요... 왜 안되는지 이유를 알수잇을까요?