월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Bean Validation 상품 수량 입력 값 넘길 시
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]상품 수량 입력 시 1111111111 Integer 값을 넘기면 숫자를 입력해주세요 메시지 박스가 뜨는데 아마 저의 개인적인 생각은 properties 설정에typeMismatch.java.lang.Integer=숫자를 입력해주세요. 메시지 대로 사용되는 것이고 오버 플로우 문제거나 다른 예외로 lang.Integer 아이디로 쓰인 것이 맞나요? 그리고 이런 예외 사항은 실무에서는 예외로 처리하는지 아니면 서버 단에서 Max 에노테이션 중 어디서 검증하나요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리하기 - 세션 직접 만들기 질문있습니다.
//에러상황: Non-static method 'expire(javax.servlet.http.HttpServletRequest)' cannot be referenced from a static context SessionManager.expire(request);강의에서도 해당 메소드는 void로 설정이 되어있는데 제코드에서는 static으로 변경하라고 합니다. 왜그런건가요?전체코드는 아래입니다.https://drive.google.com/file/d/107rul0A6wUfORUDnXYu3jzReRJeYLm63/view?usp=drive_link
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리하기 - 세션 직접 만들기 질문있습니다.
public class SessionManagerTest { SessionManager sessionManager=new SessionManager(); @Test void sessionTest(){ //세션을 생성 <-이게 클라이언트단에서 생성이되는건가요? 서버에서 생성하는건가요? MockHttpServletResponse response=new MockHttpServletResponse(); Member member=new Member(); sessionManager.createSession(member,response); //요청에 응답 쿠키 저장 <-서버 저장이고 MockHttpServletRequest request=new MockHttpServletRequest(); request.setCookies(response.getCookies()); //세션조회 <-클라이언트 조회가 맞나요? Object result=sessionManager.getSession(request); Assertions.assertThat(result).isEqualTo(member); }}주석에 질문 달았습니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 부트 메시지 소스 설정 부분 궁금한 점 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이 의미를 제가 제대로 이해한 건지 모르겠습니다. 제가 이해한 대로라면 application.properties에 제가 아무 것도 추가하지 않으면스프링 부트가 알아서 application.properties에spring.messages.basename=messages 이걸 추가하고, 이렇게 messages만 지정되어도 부가적으로 messages_en.properties, messages_ko.properties 이것들도 인식되는 거로 이해했습니다. 맞나요? 그리고 꼭 ko나 en 말고도messages_temp.properties 또는 messages_sdfsdf.properties 이것들도 다 인식된다고 보면 되나요? 2) 스프링 부트를 쓰지 않고@Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages"); messageSource.setDefaultEncoding("utf-8"); return messageSource; }이 코드를 쓴다고 한다면, 이때도 messageSource.setBasenames("messages"); 이렇게 messages만 지정하면 messages_en.properties , messages_ko.properties 다 인식할 수 있나요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
강의 질문있습니다.
코드:https://drive.google.com/file/d/1-boCk986F_VNjEObI-UUI25QMl51ysUf/view?usp=drive_link강의 HandlerExceptionResolver 시작을 듣는데public class ApiExceptionController { }에서 괄호 부분에서 빨간줄이 나오는데 강의코드랑 같은데 왜 나오는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예외 처리와 오류 페이지 강의 질문있습니다.
서블릿 예외 처리 - 시작 4분 java 17에서는 프로퍼티에 server.error.whitelabel.enabled=false 이부분이 없는데 직접입력해야 false가 되는건가요? 아니면 자동으로 false가 되는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리1 - 쿠키, 세션-회원 가입 질문있어요.
public List<Member> findAll(){에서 new가 나오는 이유가 ArrayList<>의 값을 초기화 해주고 ArrayList배열에 값을 저장해주기 위함인가요?import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Repository;import java.util.*; @Slf4j@Repositorypublic class MemberRepository {private static Map<Long,Member> store=new HashMap<>();private static long sequence=0L;public Member save(Member member){member.setId(++sequence);log.info("save:member={}",member);store.put(member.getId(),member);return member;}public Member findById(Long id){return store.get(id);}public Optional<Member> findByLoginId(String loginId){return findAll().stream().filter(m->m.getLoginId().equals(loginId)).findFirst();}public List<Member> findAll(){return new ArrayList<>(store.values());}} 멤버에 setLoginId 부분에서 에러가 납니다. 테스트 데이터를 보와도 틀린 부분을 못찼겠습니다. 전체코드 첩부합니다. https://drive.google.com/file/d/1uzae3ASJmi4P9EiB-wPMaEnRfgEX_drj/view?usp=drive_link Member member = new Member(); member.setLoginId("test"); member.setPassword("test!"); member.setName("테스터"); memberRepository.save(member);
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<script> 와 <script th:inline="javascript"> 에서 자바스크립트 내추럴 템플릿 인라인 사용 전, 사용후 차이 오류?
@GetMapping("/javascript") public String javascript(Model model) { model.addAttribute("user", new User("userA", 10)); addUsers(model); return "basic/javascript"; }javascript.html<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 자바스크립트 인라인 사용 전 --> <script> var username = [[${user.username}]]; var age = [[${user.age}]]; //자바스크립트 내추럴 템플릿 var username2 = /*[[${user.username}]]*/ "test username"; //객체 var user = [[${user}]]; </script> <!-- 자바스크립트 인라인 사용 후 --> <script th:inline="javascript"> var username = [[${user.username}]]; var age = [[${user.age}]]; //자바스크립트 내추럴 템플릿 var username2 = /*[[${user.username}]]*/ "test username"; //객체 var user = [[${user}]]; </script> <!-- 자바스크립트 인라인 each --> <script th:inline="javascript"> [# th:each="user, stat : ${users}"] var user[[${stat.count}]] = [[${user}]]; [/] </script> </body> </html><script> 와 <script th:inline="javascript"> 에서 자바스크립트 내추럴 템플릿 인라인 사용 전, 사용후 차이가 이상합니다.강의에서는 인라인 사용 후에 아래와 같이 적용된다고 했는데,var username2 = "userA";제가 테스트해 본 결과, 아래와 같이 적용 됩니다.var username2 = /*"userA"*/ "test username";인라인 사용전인 var username2 = /*userA*/ "test username";`에서 /*userA*/ 부분에 "" 만 추가되었습니다..제가 잘못 이해하거나 뭔가 잘못 작성한 것이 있을까요?제가 작성한 코드와 버젼, 이미지 첨부 드립니다.Spring Boot: 3.2.5java: 17
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
model역할에 대해 궁금한점이 있습니다.
@GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "validation/v1/addForm"; }위에 코드는 mvc2 강의 v1controller 코드 중 일부이고 아래는 mvc1 강의 마지막 챕터 코드 중 일부입니다.public class BasicItemController { @GetMapping("/add") public String addForm() { return "basic/addForm"; } 궁금한점이 있는데. v1controller 코드에서 mvc1처럼 코드를 입력하게 되면 add 사이트로 이동시 서버 에러가 뜹니다.Model 객체는 뷰에 전달할 데이터를 담는 컨테이너 역할을 합니다. 라고 하는데 그렇다면 mvc1에서 model없이 어떻게 작동이 되는건가요?model이 view와 controller사이에서 사다리 역할하는건가요? 데이터 저장소가 아니라요?@GetMapping("/add") public String addForm() { return "validation/v1/addForm"; }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1 - Validation-오류 코드와 메시지 처리1강의 중에 질문이잇습니다.
섹션 4. 검증1 - Validation-오류 코드와 메시지 처리1강의 중에 질문이잇습니다.아래는 해당 강의 코드 중 일부분입니다.제가 궁금한 내용은 위의 사진처럼 new가 3번 나오는데 위의 그림처럼 이해해도 되나요?즉 bindingResult 변수 안에 FieldError객체 생성하고 그 안에 new String[]1개,new Object[]1개생성되는것이 맞나요? // @PostMapping("/add") public String addItemV3(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { //검증 로직 if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item", "itemName", item.getItemName(), false, new String[]{"required.item.itemName"}, null, null)); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null)); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { bindingResult.addError(new FieldError("item", "quantity", item.getQuantity(), false, new String[]{"max.item.quantity"} ,new Object[]{9999}, null)); } //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.addError(new ObjectError("item",new String[]{"totalPriceMin"} ,new Object[]{10000, resultPrice}, null)); } } //검증에 실패하면 다시 입력 폼으로 if (bindingResult.hasErrors()) { log.info("errors={} ", bindingResult); return "validation/v2/addForm"; } //성공 로직 Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId", savedItem.getId()); redirectAttributes.addAttribute("status", true); return "redirect:/validation/v2/items/{itemId}"; }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BasicItemControllerV2 코드 질문있습니다.
@PostMapping("/add") public String addItem2(@ModelAttribute("item") Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model){ //검증 오류 결과를 보관 Map<String,String> errors=new HashMap<>(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item","ItemName","상품 이름은 필수입니다.")); // errors.put("itemName", "상품 이름은 필수입니다."); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.addError(new FieldError("item","Price","가격은 1,000 ~ 1,000,000 까지 허용합니다.")); // errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다."); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { // errors.put("quantity", "수량은 최대 9,999 까지 허용합니다."); bindingResult.addError(new FieldError("item","Quantity","수량은 최대 9,999 까지 허용합니다.")); } //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { // errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice); bindingResult.addError(new ObjectError("item","가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = + resultPrice")); } } if (bindingResult.hasErrors()){ log.info("errors={}",errors); model.addAttribute("errors",errors); return "validation/v2/addForm"; }위에 코드는 BasicItemControllerV2 중 일부 입니다.FieldError는 item class에 있는 엔티티를 찾아서오류를 출력해주는건가요?ObjectError는 item class에 엔티티가 없어서 새로 item 객체를 생성해서 가격을 검사하는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ERROR null로 출력되는 문제
에러페이지인 error-ex, error-page/404, error-page/500 3개를 들어갔을 때 에러들이 출력되게 했습니다. 다른 질문들에서도 비슷한 오류를 가진 분들이 있어서 한번 해봤습니다.1차적으로 javax를 jakarta로 바꿨습니다.public static final String ERROR_EXCEPTION = "jakarta.servlet.error.exception"; public static final String ERROR_EXCEPTION_TYPE = "jakarta.servlet.error.exception_type"; public static final String ERROR_MESSAGE = "jakarta.servlet.error.message"; public static final String ERROR_REQUEST_URI = "jakarta.servlet.error.request_uri"; public static final String ERROR_SERVLET_NAME = "jakarta.servlet.error.servlet_name"; public static final String ERROR_STATUS_CODE = "jakarta.servlet.error.status_code";log.info에서 해당 상수들을 출력해보려고 했더니 error-ex페이지에서는 잘 출력되지만 404와 500에서는 모든 값이 null로 출력되었습니다.2차적으로 RequestDispatcher.ERROR_EXCEPTION처럼 모든 log.info에서 상수를 이용하는것이 아닌 RequestDispatcher.**를 사용했습니다. 이렇게 바꿨음에도 error-ex 페이지는 잘 출력되었지만 404와 500에서는 모든 값이 null로 출력되었습니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1부분에 html이 이상하게 조회됩니다.
화면에서 아래와 같이 이렇게 뜹니다. 뭐가 문제인지 알려줄 수 있나요? html은 건드른게 없어요.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ModelAttribute @RequestParam
안녕하세요. 강의를 듣던중 궁금한 내용이 생겼는데 구글링을 해도 명확한 답변이 나오지않아 질문드립니다ㅠㅠ 강의 내용중 컨트롤러의 파라미터에서, @ModelAttribute MultipartFile file와 @RequestParam MultipartFile file의 차이가 무엇인지 질문드립니다..!강의 자료에서는 ' @ModelAttribute에서도 MultipartFile을 동일하게 사용할수있다 ' 고 되어있지만, 어차피 file.getOriginalFilename()을 사용하는것은 @ModelAttribute나 @RequestParam이나 동일한것같은데, 어떨때 @ModelAttribute를 사용해야하고, 어떨때 @RequestParam을 사용해야하는지 모르겠습니다.. 둘중 아무거나 사용해도 되는건가요..? 바로 뒤 강의에서는 @ModelAttribute로서 MultipartFile을 받아오는거같은데 어떨때 사용하는것인지 궁금해서 질문드립니다..! 감사합니다!
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
pdf 파일에 이거 추가하면 좋을 것 같습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 messages.properties에 한글로 저장을 하게 되는데, 인텔리제이를 사용하면 한글 깨짐이 발생하더라구요 Setting - File Encodings에서 Default encoding for properties files 를 ISO-8859-1 에서 UTF-8 로 변경후 Transparent native-to-ascil conversion 체크하면 해결돼서 혹시 도움이 될까 하고 남겨봤습니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1 - Validation 강의에서 질문이 있습니다.
mvc1편에 이어서 작업한거 이후에 강의대로 v1~v4버전을 만들었는데요. 근데 item들어가면 화이트 페이지 뜹니다.제가 생각하기에는 basic에서 validation으로 변수 다 바꿔줬는데 안되는지 이해가 안됩니다. 아래는 전체코드입니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1 - Validation-검증 직접 처리 - 개발 질문입니다.
@PostMapping("/add") public String addItem(@ModelAttribute("item") Item item, RedirectAttributes redirectAttributes,Model model){ //검증 오류 결과를 보관 Map<String,String> errors=new HashMap<>(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 이름은 필수입니다."); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다."); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { errors.put("quantity", "수량은 최대 9,999 까지 허용합니다."); } //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice); } } if (!errors.isEmpty()){ log.info("errors={}",errors); model.addAttribute("errors",errors); return "basic/addForm"; } Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId",savedItem.getId());//인코딩 redirectAttributes.addAttribute("status",true); return "redirect:/basic/items/{itemId}";//위에는 포스트로 상품 추가 해주고 밑에는 다시 get으로 호출시키는 방법. }@ModelAttribute("item") Item item <-이부분이 item class의 엔티티를 의미하고 Model model은 메소드에서만 사용하는 특정 임시 객체로 이해하면 되나요?@ModelAttribute은 model.addAttribute가 자동으로 생성되는데요. 큰 기숙사 안에서 동일한 룸에 에러코드도 들어가고 아이템 모델도 들어가는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
특정 리소스가 없을때에 예외페이지 처리 방법 질문드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예를 들어서, 게시글을 조회하는 서비스가 있다고 가정해 보겠습니다./post/158위 URL을 요청할 경우, 웹 애플리케이션에서 id = 158인 게시글을 찾아 해당 내용을 클라이언트에게 주며, 만약 전달된 아이디에 해당하는 게시글이 없을 경우 예외(NoSuchPostException)을 반환하도록 구현을 했습니다.그런데 이 때, 아무런 설정이 없으면 예외가 WAS까지 전달이 되면 무조건 500 Error가 발생이 되는 것으로 알고 있습니다.제가 궁금한 것은위와 같은 상황에서 404 에러가 아닌, 500에러를 반환하도록 구현하는 것이 맞는 지 궁금합니다. 158이라는 아이디에 해당하는 리소스가 없을 경우에는 Not Found 404 상태코드를 반환하는게 맞다고 생각을 하였는데, 실무에서는 이런 상황에서 어떠한 상태코드를 사용하는 지 궁금합니다.특정 예외(이를테면 NoSuchPostException)상황에서는 404코드를 반환하도록 하고 싶은데, 이럴 경우 스프링에서 제공하는 BasicErrorController를 사용하지 못하고, 직접 에러 컨트롤러를 만들어서 처리해야 하나요? (스프링 인터셉터와 필터를 이용한 방법 모두 해보았는데 도저히 안되겠어서 질문드립니다)
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
404예외처리..
예를들어 api 서버인데, 없는 url요청하면 404에러나자나요그 응답 데이터 json 을 변경하려는데 , 어떤코드를 변경해야 할까요?404는 url못찾아서 컨트롤러로 진입도 하기 전인데..RestControllerAdvice는 컨트롤러에서 발생하는 것만 처리해줘서..방법을 모르겠어요 ㅠ이렇게 리턴되고 있는데 저 리턴되는 key와 값들부터 모두 커스텀하고싶은데.. { "timestamp": "2024-04-25T11:17:35.705+00:00", "status": 404, "error": "Not Found", "message": "No message available", "path": "/o%E3%85%87%E3%84%B9%E3%85%87%E3%84%B9" }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 메시지 소스 사용 시 Test 컴파일 에러 나신 분을 위해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 질문은 아니고 @Test 시 계속 컴파일 오류가 나서 다른 분들 참고하시면 될 것 같아 글 작성합니다1.컴파일 에러 났을 때 간단히 System.out 출력 했을 때 ???일 때 상단 메뉴 바에서 Settings 클릭 > Encoding 검색해서 File Encodings 들어가서 사진 처럼 UTF-8로 바꿔주기 안되면 윈도우 시스템이 언어 설정 확인하기