월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션이 삭제되는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의 잘 보고 있습니다. 세션이 삭제되는 시점에 대해서 의문점이 생겨서 질문드립니다.영한님께서 HTTP는 비연결성이기 때문에 서버에서 세션데이터를 언제 삭제해야하는지 모른다고 하셨습니다. 사용자의 마지막 요청을 기준으로 30분 이후에 세션이 삭제된다고 했을 때 서버는 30분이 지났는지 어떻게 아는건가요? 제가 생각했을 때는 서버에서 자체적으로 계속 30분이 지났는지 확인을 하거나 사용자 요청이 들어올 때 먼저 30분이 지났는지 확인하고 세션을 삭제해줄 수 있을 것 같습니다.스프링에서는 어떤 방법으로 확인하는지 궁금합니다!
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
해당 로그인 체크 로직에서 에러가 발생하지 않으려면
/** * @return null 로그인 실패 */ public Member login(String loginId, String password) { Optional<Member> byLoginId = memberRepository.findByLoginId(loginId); Member member = byLoginId.get(); if (member.getPassword().equals(password)) { return member; } else { return null; } // return memberRepository.findByLoginId(loginId) // .filter(m -> m.getPassword().equals(password)) // .orElse(null); } 복사하실 수 있게 코드 원본과 사진 첨부드립니다.밑에 주석처리한 부분이 이제 강의에서 stream으로 간소화한 로직인데요.stream을 사용하지 않은 로직으로 로그인에 실패했을 때, NoSuchElementException 에러가 발생하는 것을 확인했습니다.아마 optional 객체에 get() 메서드를 찍을 때, 발생하는 것 같습니다. 여기서 질문이 있습니다. stream의 filter를 이용하면, 왜 에러가 발생하지 않는 것인지 궁금합니다. stream을 통해 코드를 간소화시켰지만 두 코드의 동작 원리는 같다고 생각합니다. 단지 stream만 썼다고 위 코드는 에러가 발생하고, 아래 코드는 에러가 발생하지 않는 것이 이해가 잘 안되는 것 같습니다. (stream에 대한 이해가 부족한 탓일까요)만약 stream 처리를 하지 않은 로직을 사용한다고 했을 때, NoSuchElementException 에러가 발생되지 않게 하려면 어떻게 로직을 재구성 해야할까요? stream 사용 x
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
1:15 단축키 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]Form 전송 객체 분리 - 개발 강의의 1:15초 에서 단축키를 사용해서 해당 코드 라인의 첫줄로 커서를 이동하는 명령어를 알 수 있을까요? 감사합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
JPA Entity에 Bean Validation 적용시 오류 문제
[질문 내용]JPA 엔티티에 @NotNull 같은 Bean Validation을 사용하면 적용은 되지만 트랜잭션 에러가 발생하면서 BindingResult에 오류가 자동으로 담기지가 않아 타임리프 렌더링에서 오류 문구가 뜨는게 아니라 바로 오류 페이지로 넘어가는거 같은데 해결할 방법이 있을까요
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@GetMapping @PostMapping에 대해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "form/addForm"; } @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes) { log.info("item.open={}", item.getOpen()); Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId", savedItem.getId()); redirectAttributes.addAttribute("status", true); return "redirect:/form/items/{itemId}"; }이 코드에서 빈 객체를 만든뒤에 html 폼 에서 버튼을 누르면 post가 작동해서 PostMapping으로 다시 객체 안에 밸류가 세팅되어서 들어오나요? 동작하는 과정이 이해가 잘 안되는거같습니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ResponseBody와 ResponseEntity를 같이 써도 되나요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의에선 @RestController로 이미 모든 컨트롤러에 @ResponseBody 응답을 하는데 JSON 응답 컨트롤러에선 반환 타입을 ResponseEntity로 하여 둘 간의 충돌이 있지 않을까해서 질문드립니다 !
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
테스트가 통과되지 않습니다
안녕하세요 스프링 메세지 소스 사용 강의 테스트 부분에서 messages.properties파일을 만들었는데도 "안녕"이 "??"로 인식됩니다 제가 빠뜨린 부분이 있는걸까요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Post 폼 요청 시, 타입 미스매치에 대한 질문
JSON 요청 시, 타입을 맞지 않게 입력하게 되면, 컨트롤러 자체가 아예 호출되지 않는 것을 강의를 통해 확인했습니다. Post 폼 요청 시, 이런 타입에 대한 올바르지 않은 입력을 하게 되어도, 컨트롤러가 호출되고 검증 단계까지 도달할 수 있는 이유가 스프링 프레임워크가 자동으로 타입을 적절하게 형변환해주기 때문인가요? 이유가 궁금합니다!
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예외를 여기서 마무리하기
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의 잘 보고 있습니다.한 가지 궁금한 점이 생겼는데 바로 직전 강의에서는 똑같이HandlerExceptionResolver를 아래와 같이 사용했는데 서블릿 컨테이너까지 에러를 전달해서 서블릿 컨테이너가 다시 서버 내부에서 BasicErrorController로 재요청하는 방식으로 이루어진 것 같은데, 왜 여기서는 HandlerException 에서 처리가 마무리 되었는지 헷갈립니다. 제가 생각하기에는 response.sendError 때문에 이전 강의에서는 서블릿 컨테이너까지 에러가 갔다가 다시 재요청을 한 것이고, 이번에는 response.sendError를 쓰지 않았기 때문에 HandlerExceptionResolver에서 마무리가 된 것 같은데 이게 맞나요?? 이전 강의와 현재 강의의 코드 비교 입니다.이전 강의 코드package hello.exception.resolver; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @Slf4j public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 현재 강의 코드package hello.exception.resolver; import com.fasterxml.jackson.databind.ObjectMapper; import hello.exception.exception.UserException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.util.HashMap; import java.util.Map; @Slf4j public class UserHandlerExceptionResolver implements HandlerExceptionResolver { private final ObjectMapper objectMapper = new ObjectMapper(); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof UserException) { log.info("UserException resolver to 400"); String acceptHeader = request.getHeader("accept"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); if ("application/json".equals(acceptHeader)) { Map<String, Object> errorResult = new HashMap<>(); errorResult.put("ex", ex.getClass()); errorResult.put("message", ex.getMessage()); String result = objectMapper.writeValueAsString(errorResult); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().write(result); return new ModelAndView(); } else { // TEXT/HTML return new ModelAndView("error/400"); } } } catch (Exception e) { log.error("resolver ex", e); } return null; } }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
request.getAttribute
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 듣는데 ErrorPageController의request.getAttribute(ERROR_EXCEPTION); request.getAttribute(ERROR_STATUS_CODE);사용이 궁금합니다. request에 setAttribute로 넣어준 값이 없는데 어떻게해서 저렇게 작동하는 것인지 잘 모르곘습니다.얼핏 기억나는 내용으론 이전 강의 8장에서 디스패처 서블릿이 에러 내용을 넣어준다고 했던거 같은데 그게 맞나요?맞다면 복습을 하고 싶은데 혹시 어떤 파트를 다시 보면 될지 알려주시면 감사하겠습니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]본 강의에 그대로 따라서 코드를 작성했는데, 에러가 발생합니다. @Controller @RequestMapping("/basic") public class BasicController { @GetMapping("/text-basic") public String textBasic(Model model) { model.addAttribute("data", "hello spring!"); return "basic/text-basic"; } @GetMapping("/text-unescaped") public String textUnescaped(Model model) { model.addAttribute("data", "Hello <b>Spring!</b>"); return "basic/text-unescaped"; } @GetMapping("/variable") public String variable(Model model) { User userA = new User("userA", 10); User userB = new User("userB", 10); List<User> list = new ArrayList<>(); list.add(userA); list.add(userB); Map<String, User> map = new HashMap<>(); map.put("userA", userA); map.put("userB", userB); model.addAttribute("user", userA); model.addAttribute("users", list); model.addAttribute("userMap", map); return "basic/variable"; } @GetMapping("/basic-objects") public String basicObjects(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) { session.setAttribute("sessionData", "Hello Session"); model.addAttribute("request", request); model.addAttribute("response", response); model.addAttribute("servletContext", request.getServletContext()); return "basic/basic-objects"; } @GetMapping("/date") public String date(Model model) { model.addAttribute("localDateTime", LocalDateTime.now()); return "basic/date"; } @Component("helloBean") static class HelloBean { public String hello(String data) { return "Hello " + data; } } @Data static class User { private String username; private int age; public User(String username, int age) { this.username = username; this.age = age; } } }<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>LocalDateTime</h1> <ul> <li>default = <span th:text="${localDateTime}"></span></li> <li>yyyy-MM-dd HH:mm:ss = <span th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}"></span></li> </ul> <h1>LocalDateTime - Utils</h1> <ul> <li>${#temporals.day(localDateTime)} = <span th:text="${#temporals.day(localDateTime)}"></span></li> <li>${#temporals.month(localDateTime)} = <span th:text="$ {#temporals.month(localDateTime)}"></span></li> <li>${#temporals.monthName(localDateTime)} = <span th:text="$ {#temporals.monthName(localDateTime)}"></span></li> <li>${#temporals.monthNameShort(localDateTime)} = <span th:text="$ {#temporals.monthNameShort(localDateTime)}"></span></li> <li>${#temporals.year(localDateTime)} = <span th:text="${#temporals.year(localDateTime)}"></span></li> <li>${#temporals.dayOfWeek(localDateTime)} = <span th:text="$ {#temporals.dayOfWeek(localDateTime)}"></span></li> <li>${#temporals.dayOfWeekName(localDateTime)} = <span th:text="$ {#temporals.dayOfWeekName(localDateTime)}"></span></li> <li>${#temporals.dayOfWeekNameShort(localDateTime)} = <span th:text="$ {#temporals.dayOfWeekNameShort(localDateTime)}"></span></li> <li>${#temporals.hour(localDateTime)} = <span th:text="${#temporals.hour(localDateTime)}"></span></li> <li>${#temporals.minute(localDateTime)} = <span th:text="$ {#temporals.minute(localDateTime)}"></span></li> <li>${#temporals.second(localDateTime)} = <span th:text="$ {#temporals.second(localDateTime)}"></span></li> <li>${#temporals.nanosecond(localDateTime)} = <span th:text="$ {#temporals.nanosecond(localDateTime)}"></span></li> </ul> </body> </html>다른 질문을 찾아보니까 ul 태그 밑에 li 태그가 한줄로 넣어야 된다고 해서 그렇게 했는데도 오류가 발생합니다. 정확하게는 <h1>LocalDateTime - Utils</h1> 아래의 ul 태그 밑에서 부터 오류가 발생합니다. 오류 메시지는 다음과 같습니다. org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "$ {#temporals.month(localDateTime)}" (template: "basic/date" - line 16, col 56)도움 주시면 감사하겠습니다 ㅠ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
filter 질문
@PostMapping("/login") public String loginHttpSession(@Validated @ModelAttribute("member") LoginForm loginForm, BindingResult bindingResult,HttpServletRequest request, @RequestParam(value = "redirectURL") String redirectURL) { if(bindingResult.hasErrors()) { log.info("로그인 에러"); return "login/login"; } SignUpMember signUpMember = loginService.loginMember(loginForm.getLoginId(), loginForm.getPassword()); if(signUpMember == null) { bindingResult.reject("loginFail", "아이디 또는 비밀번호가 틀렸습니다"); return "login/login"; } HttpSession session = request.getSession(); session.setAttribute(SessionConst.LOGIN_MEMBER, signUpMember); return "redirect:/guPage/index"; } 위 코드를 작성해서 http://localhost:8080/login?redirectURL=/basic/items위 url을 post로 받으려 하는데 405 error가 뜨네요 어떻게 하면 될까요?그리고 제가 알기론 @RequestParam(value = "redirectURL") String redirectURL에서 value를 제거해도 된다고 알고 있는데 value를 안적어주니 이것도 에러가 나더라고요 어떻게 하면 될까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession 정리
[질문 템플릿]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 안에서 여러 개의 세션을 생성하는 것의 차이가 궁금합니다
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿과 파일 업로드1 - debug 로그 내용이 출력 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) -> 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) -> 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) -> 예[질문 내용]application.properties 에 logging.level.org.apache.coyote.http11=debug 를 설정하여 HTTP 메시지 로그를 보고자 하였으나 강의 영상처럼 출력 되지 않습니다.↑상품명과 파일(임의의 png 이미지)을 서버로 보낸 상태 apache DEBUG 레벨 로깅 내용을 보고 싶은데 어떻게 해야하나요? [사용환경]os: win11springBoot: 3.2.3ide: Ultimate 2023.3.2java: 17
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바17버전
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]17버전이라 스프링부트 3점대로 만들고 main이랑 test복사해서 프로젝트 생성후 javax를 변경까지 했습니다.메인 애플리케이션을 실행하면 잘 되는데 테스트 코드 실행하면 이렇게 오류가 납니다 뭐가 문제일까요
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예제로 구현하는 파일 업로드,다운로드 25:50 부근
제가 지정한 경로에 파일도 업로드 되고redirect 되는것도 확인했습니다 post요청을 보매녀 redirect되서 /items/1로 get요청을 보내는데 여기서 whitelabel 오류가 나옵니다. item-view.html에서첨부파일:<img>를 삭제하고 돌리면정상적으로 뷰를 랜더링 합니다어디서 문제가 발생한건가요??+파일을 첨부안하면 오류가 발생안하고 파일을 첨부하면 오류가 발생합니다. 어디서 문제가 있는지 감이안오네요ㅜ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field 질문
th:field를 사용했을 때 id, name, value로 변하는 것은 input태그에서만 가능한건가요?span태그로 하니 변하지 않아서요
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿, 서블릿 컨테이너, 서블릿/애플리케이션 컨텍스트
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 듣다가 용어에 혼동이 와서 용어 정리 좀 하고 싶은데요.서블릿이라고 말하는 것은 SpringMVC에서 디스패처 서블릿을 의미하는 것이 맞나요?서블릿 컨테이너가 나와서 헷갈렸는데 강의 내용으로 대략 유추해볼 때 WAS(톰캣)을 말하는 게 맞나요?서블릿 컨텍스트, 애플리케이션 컨텍스트 이렇게 두 가지를 따로 말하던데 어떤 개념인가요?혹시 위 내용들을 강의에서 다룬 곳을 아시거나 참고할 만한 문서가 있으면 알려주시면 감사하겠습니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
실무 사용 질문
A폼에서는 required만 사용하고, B폼에서는 더 구체적인 레벨의 required.item을 사용한다는 가정하에,errors.properties에 required.item 메시지를 정의해두면 A, B폼 모두 구체적인 레벨의 메시지가 적용될 것이라고 생각합니다.즉, 여러 단계 레벨의 메시지를 작성해놓더라도, 항상 가장 구체적인 레벨의 메시지만 사용되지 않을까하는 의문입니다. 그럼 결국, 폼에 따라 메시지를 다르게 사용하는 게 아니라 모두 구체적인 메시지를 사용하게 되는 것인데, 어떻게 실무에서는 이걸 다르게 적용되도록 구현하는지 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
true, false 질문
단순 값에 의한 처리는 값이 일단 넘어오긴 하니까, bindingFailure 값을 false로 둔 것이고, 타입에 대한 처리는 내부에서 bindingFailure 값이 true로 전달된다고 이해하면 될까요? 이 타입에 대한 처리 코드는 따로 작성할 필요는 없는 건가요? (bindingFailure가 true인)