월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
request.getSession 과 sessionStore
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]제가 이해한 바로는request.getSesison 을 통해 얻는 HttpSession 은SessionManager 와 비교하면 createSession 동작이 아니라 sessionStore 와 같은 개념의 저장소를 호출하는 것 같고,HttpSession 의 setAttribute 동작이 createSession 의 sessionStore.put 과 같은것이며request.getSesison 를 통해 null 이 아닌 session 이 처음 만들어질 때, response 에 어떤 클라이언트의 sessionStore(HttpSession) 인지 구분하는 id 가 쿠키로 담기는 것 같은데이렇게 이해하는게 맞을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
특정 파일을 넣는 경우 Whitelabel Error가 뜨는 이유가 궁금합니다
파일 업로드 예제를 진행하던 와중에.pdf 파일이나 동일하지만 사이즈가 작은 스크린샷 .png 까지는 정상적으로 업로드 되는데 올려드린 다음과 같은 파일을 업로드 시도하는 경우 whitelabel error 페이지가 뜨면서 업로드가 정상적으로 실행이 되지 않습니다 해당 파일의 메타데이터는 다음과 같은데.... 2023-08-23 17:00:14.790 ERROR 9800 --- [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.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.] with root cause 다음과 같은 이유였네요 생각보다 스프링이 기본적으로 허용하는 사이즈가 작은가봅니다 혹시라도 다른분이 도움되실까 싶어 남겨놓겠습니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ISP와 DefaultConversionService의 연관성
DefaultConversionService 가 왜 ISP 원칙에 연관되어있는지 잘 이해가 가지 않아 질문드립니다. 결론적으로 ISP의 경우 인터페이스 분리 원칙, 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 말아야한다인데DefaultConversionService의 경우 사용과 등록을 모두 사용하고 있습니다, 따라서 두 가지 기능을 모두 사용하게 되는데 결국 두개 다 사용하게 되면 애초에 인터페이스를 분할할 필요가 없게 되는것이 아닌지 궁금합니다. 두 개를 분리함으로써 얻게되는 이득에 대해서 다시 한번만 설명이 가능하실지 궁금합니다 ㅠㅠ 감사합니다!
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바 17은 어떻게 프로젝트를 진행해야 하나요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이런 문구가 떠서 그런데요 그래서java17로 모든 파일의 내용을 복사해서 새로운 프로젝트를 만든 다음에 java17로 진행해야 할지,아니면 자바11 해야 되는지 고민입니다. 근데 자바 17에서 자바 11로 저번에 하려다가 실패해고, 이 파일에만 자바 17로 실행하는 방법이 없어서 어떻게 해야 할지 모르겠네요 ㅠㅠ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
fragment 조각 css적용문제..
[질문 내용]index.html위치templates/index.htmlfragment 조각 위치 template/template/fragment/header.htmlcss위치 resources/static/css/header.css , index.csstemplate/template/fragment의 파일을 th:insert로 삽입하는것 까진 성공했는데요. 삽입할 fragment조각의 header부분에 css가 적용되지 않습니다.index.html의 경우 css가 적용이 됐는데, insert할 대상인 header.html만 css가 적용되지 않는 이유가 궁금합니다.답변 부탁드립니다.. 감사합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
어그리거트 질문
안녕하세요. 개인프로젝트를 하면서 질문이 생겨 올립니다. 데이터베이스에게시글테이블과 첨부파일테이블이 있다면두 개는 각각 다른 어그리거트로 놓는게 좋을까요? (게시글 수정과 첨부파일 추가는) 게시글을 쓴 사람뿐만 아니라 권한이 있는 누구나 할 수 있게 구현할 예정입니다. 예를 들어, jira와 비슷하게 구현하려고 합니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
제대로 한게 맞는건가요?
@Transactional @Override public void updatePassword(String UUID, PasswordUpdateDto passwordUpdateDto) { User user = userRepository.findByUuid(UUID).orElseThrow(() -> new IllegalArgumentException("UUID정보 없음 = " + UUID)); user.hashPassword(passwordUpdateDto.getPassword()); }이게 서비스 코드인데 여기서 예외가 터지면 컨트롤러로 넘어가서 catch (IllegalArgumentException ex) { throw ex } 을 해서 처리하는게 맞게 하는건가요? @PutMapping("/user/update-password/{UUID}") public ResponseEntity<String> updatePassword(@PathVariable String UUID, @RequestBody PasswordUpdateInfo passwordUpdateInfo) { try { ModelMapper modelMapper = new ModelMapper(); PasswordUpdateDto passwordUpdateDto = modelMapper.map(passwordUpdateInfo,PasswordUpdateDto.class); userService.updatePassword(UUID,passwordUpdateDto); return ResponseEntity.ok("Password updated successfully"); } catch (IllegalArgumentException ex) { throw ex; } } @Slf4j @RestControllerAdvice(annotations = RestController.class) public class ExceptionController { @ExceptionHandler public ResponseEntity<ErrorResult> userExHandle(IllegalArgumentException e) { ErrorResult errorResult = new ErrorResult("USER-NOT-FIND", e.getMessage()); return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST); } } 포스트맨 쓰니까 일단 뜨긴뜨닙다
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터 내에서 다른 계층 빈을 주입받아 사용해도 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 부트를 사용해서 게시판을 만들고 있습니다. 회원의 인증과 인가에 대한 부분을 인터셉터로 처리하려고 합니다. 이때 단순 로그인 부분은 servletRequest.session을 사용해서 확인할 수 있는데, 로그인 사용자의 자세한 정보를 인터셉터에서 열람하여 사용하는 것이 좋은 방식인지 궁금합니다.예를 들어, 자신의 게시물을 삭제하는 api 요청이 왔을 때, 인터셉터에서 session을 통해 요청 사용자의 로그인 여부를 판별하고 (1), service 계층을 주입받아 해당 사용자가 삭제 요청한 게시물을 해당 사용자가 작성하였는지 확인하는 작업(2)이 있을 경우 모두 인터셉터에서 처리하면 인터셉터가 비즈니스 로직의 책임을 부여받는 구조이므로 지양하는 것이 좋은지 궁금합니다. 그와 별개로, 로그를 DB에 저장하기 위해 관련 repository를 주입받는 등 공통 관심사에 집중된 사용의 경우 다른 계층을 주입받는 것은 괜찮은지 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
mvc2 form 프로젝트에 있는 add.html 문법문제
제가 지금 스프링부트 3.0 이상 사용하고 있는데 타임리프 문법오류가 나는데 혹시 버전 문제인건가요?<!DOCTYPE HTML><html xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><link th:href="@{/css/bootstrap.min.css}"href="../css/bootstrap.min.css" rel="stylesheet"><style>.container {max-width: 560px;}</style></head><body> <div class="container"> <div class="py-5 text-center"><h2>상품 등록 폼</h2></div> <form action="item.html" th:action th:object="${item}" method="post"><div><label for="itemName">상품명</label><input type="text" id="itemName" th:field="*{itemName}" class="form-control" placeholder="이름을 입력하세요"></div><div><label for="price">가격</label><input type="text" id="price" th:field="*{price}" class="form-control" placeholder="가격을 입력하세요"></div><div><label for="quantity">수량</label><input type="text" id="quantity" th:field="*{quantity}" class="form-control" placeholder="수량을 입력하세요"></div> <hr class="my-4"> <!-- single checkbox --><div>판매 여부</div><div><div class="form-check"><input type="checkbox" id="open" th:field="*{open}" class="form-check-input"><label for="open" class="form-check-label">판매 오픈</label></div></div> <!-- multi checkbox --><div><div>등록 지역</div><div th:each="region : ${regions}" class="form-check form-check-inline"><input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"><label th:for="${#ids.prev('regions')}"th:text="${region.value}" class="form-check-label">서울</label></div></div> <!-- radio button --><div><div>상품 종류</div><div th:each="type : ${itemTypes}" class="form-check form-check-inline"><input type="radio" th:field="*{itemType}" th:value="${type.name()}" class="form-check-input"><label th:for="${#ids.prev('itemType')}" th:text="${type.description}" class="form-check-label">BOOK</label></div></div> <!-- SELECT --><div><div>배송 방식</div><select th:field="*{deliveryCode}" class="form-select"><option value="">==배송 방식 선택==</option><option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}"th:text="${deliveryCode.displayName}">FAST</option></select></div> <hr class="my-4"> <div class="row"><div class="col"><button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button></div><div class="col"><button class="w-100 btn btn-secondary btn-lg"onclick="location.href='items.html'"th:onclick="|location.href='@{/form/items}'|"type="button">취소</button></div></div> </form> </div> <!-- /container --></body></html>
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인인증필터 return "redirect:" + redirectURL; 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 17:48초에 나오는 내용에 질문드립니다.return "redirect:" + redirectURL;위 경로대신 밑에 있는 경로를 썼는데 이상 없던데 이렇게 해도 무방한가요?return "redirect:/items";
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
DeliveryCode 리팩토링
[문제 상황]강의 자료에서 언급되어 있는 DeliveryCode 객체가 반복 생성되는 것을 개선하도록 리팩토링 해보았습니다. 제가 작성한 코드의 문제점 또는 개선할 점을 알려주신다면 감사드리겠습니다.[리팩토링 전]DeliveryCode 클래스FormItemController에서 Model에 등록item.html[리팩토링 후]DeliveryCodeRepository 클래스 (추가)FormItemController에서 Model 등록 (수정)
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만약 WAS가 죽는 경우 Exception Handling?
안녕하세요!이번에도 강의를 듣던 도중 궁금한 점이 생겨 질문드립니다. 이전에 스프링 MVC 1편 초반부에서 웹 시스템을 구성함에 있어, 정적 리소스는 웹서버에 동적 렌더링이 필요한 데이터 트랜잭션 부분들은 WAS에 역할을 나누어 구성한다고 알려주셨던 것으로 기억하는데요!지금 배우는 부분은 WAS 내에서 서블릿과 스프링 MVC가 어떻게 동작하는지 배우는 것으로 이해했습니다.그렇다면 지금 공부하는 시점에서는 WAS가 죽어버리면 아예 접속이 안되는 (흔히 서버가 다운되어서 Request Timeout이 뜨는 것과 동일함) 것으로 이해하면 될까요? 그리고 콘서트 티켓팅 사이트들에서 예매를 진행하게 될때 모 사이트에서는 아예 Timeout이 됐는지 안됐는지도 개발자 도구에서 확인해야하고 페이지는 하얀 화면만 띄우고 있던데이런 Timeout 관련해서는 Exception을 띄우는게 불가능한건지도 여쭤보고 싶습니다 감사합니다!
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그아웃시 쿠키 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 로그아웃을 하면 개발자 도구에서 네트워크 탭에 헤더에는 Max-Age = 0 이라고 표기가 되는데, 애플리케이션 탭에는 쿠키가 제거되지 않고 Expires에 세션이라고 뜹니다. 크롬 브라우저 설정도 찾아봤는데 해결이 되지 않습니다. 무엇이 문제인가요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
errorPage500Api ex null
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ex에 null값이 들어오는데 무엇이 문제일까요,..?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인인증필터 로직 질문입니다.
try{ log.info("인증 체크 필터 시작{}",requestURI); if(isLoginCheckPath(requestURI)){ log.info("인증 체크 로직 실행 {}",requestURI); HttpSession session = httpServletRequest.getSession(false); if(session==null || session.getAttribute(SessionConst.LOGIN_MEMBER) ==null){ log.info("미인증 사용자 요청 {}", requestURI); //로그인으로 redirect httpServletResponse.sendRedirect("/login?redirectURL=" + requestURI); return; } } log.info("aaa"); chain.doFilter(request,response); } catch (Exception e){ throw e; } finally { log.info("인증 체크 필터 종료 {}" , requestURI); }강의자료에는 다음과 같이 되있습니다.return; 여기가 중요하다. 필터를 더는 진행하지 않는다. 이후 필터는 물론 서블릿, 컨트롤러가 더는호출되지 않는다. 앞서 redirect 를 사용했기 때문에 redirect 가 응답으로 적용되고 요청이 끝난다. 이렇게 강의자료에 되있는데 제가 위 코드처럼 임의로 log.info("aaa")를 추가하고 돌린결과 미인증사용자 요청if문에 걸려서 return이 걸리면 return 때문에 다음필터호출x,서블릿,컨트롤러호출x 때문에 로그 aaa가 안나와야 되는거 아닌가요? 왜 return을 썼는데 log.info("asdasdsdasdads"); chain.doFilter(request,response); 이 두줄이 실행되는지 궁금합니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
homeController 질문
최초 로그인 성공 후 homeController에서 파라미터로 넘어온 memberId로 다시 memberRepository에서 회원을 조회하는 이유가 model에 회원객체를 담기위해서 그런건가요?? 이때는 서비스단을 안거치고 리파지토리에바로 접근하는 이유가 뭔가요??
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
redirect items
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]http://localhost:8080/items 에 들어가서 로그인을 하게되면 기본 로그인 홈화면이 나옵니다. 파라미터는 잘 넘어가는 걸로 보이는데 확인해보면 "/" 값이 들어옵니다. 어디에 문제가 있을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@Data를 작성한 이유가 무엇일까요?
강의 내에서 User 클래스를 작성할때, @Data를 작성한 이유가 무엇일까요? 타임리프 문법 내에서 getter, setter메소드를 사용해서 프로퍼티 접근을 하기위해 @Data를 적은것이라고 이해해도 될까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션과 쿠키 생명주기
세션과 쿠키의 생명주기가 헷갈려서 질문드립니다.어떨때는 브라우저를 닫으면 쿠키와 세션이 종료되고 어떨때는 세션만종료되고 생각해보면 기준이 총 4개1.쿠키(생명주기 미설정)2.쿠키(생명주기 설정)3.세션(생명주기 미설정)4.세션(생명주기 설정) 이렇게 4가지 경우가 있는것 같은데 여기서 추가적으로 세션이 사라져도 쿠키가 살아있는 경우도 있나요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션에 여러 데이터를 저장할 수 있다.
@PostMapping("/login") public String loginFormV3(@Validated LoginForm loginForm, BindingResult bindingResult, HttpServletRequest request){ if(bindingResult.hasErrors()){ return "login/loginForm"; } Member loginMember = loginService.login(loginForm.getLoginId(), loginForm.getPassword()); if(loginMember == null){ bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } // 로그인 처리 TODO 쿠키를 만들어서 브라우저로 전송하면 브라우저에서 요청시마다 쿠키를 함께 전달함 // 스프링에서 제공하는 HTTP 세션 매니저 사용 HttpSession session = request.getSession(); // 세션이 있으면 있는 세션 반환 없으면 새로 만들어서 반환함 // 세션에 로그인 회원 정보를 보관한다. session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); // 기본적으로 다 메모리에 저장됨 // 세션 생성하려면 .getSession에 파라미터를 true(근데 디폴트라 생략가능) // false라고 하면 새로운 세션을 반환하지 않고 null로 반환한다. //sessionManager.createSession(loginMember, response); return "redirect:/"; } 이 코드에서 session.setAttribute()을 통해 하나의 세션의 여러 값을 저장할 수 있다는 말이 잘 이해가 가지 않아서 질문드립니다 여기서 여러 값을 저장할 수 있다는 말은 하나의 key에 여러가지 value를 저장하는 MultiValueHashMap처럼 사용할 수 있다는 뜻인가요? 감사합니다!