월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증 관련해서 궁금한 점이 있습니다.
검증 관련해서 궁금한 점이 있습니다. Controller-Service-Repository 구조 + validator 인터페이스를 구현한 클래스가 있다고 했을 때, 사용자가 보낸 uuid가 DB에 존재하는지 여부 검증을 Repository 또는 Service에서 하는게 좋은가요? validator 인터페이스를 구현한 클래스에서 하는게 좋은가요? 아니면, 일관되게 개인이 정하면 되는건가요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오타 제보합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]간단한 경계값 범위 오타 같아요.강의 자료 검증1 5page if (item.getQuantity() == null || item.getQuantity() >= 9999) { errors.put("quantity", "수량은 최대 9,999 까지 허용합니다."); } item.getQuantity() > 9999 로 조건문 범위 변경.그외 13,18,22,24,35page도 마찬가지로 수정이 필요한것 같습니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 시에 세션객체
스프링 세큐리티의 userDetails를 이용해서 로그인을 구현할 때멤버 테이블의 모든 정보를 담지말라고 하던데... 여기에 pk정도만 담는게 맞을까요?public class CustomMemberDetails implements UserDetails { private String username; private String password; private Collection<? extends GrantedAuthority> authorities; }
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Exception evaluating SpringEL expression: "#fields.hasGlobalErrors()"
먼저 html은 다음과 같이 작성되어있습니다.<form th:action method="post" th:object="${form}" enctype="multipart/form-data"> <input class="form-control" accept=".txt" type="file"> <div th:if="${#fields.hasGlobalErrors()}"> <p class="field-error" th:each="err: ${#fields.globalErrors()}" th:text="${err}">전체 오류 메시지</p> <button class="btn btn-primary">Submit</button> </form>그리고 controller에서는 다음과 같이 작성했습니다.@PostMapping public String getFile(@Validated @ModelAttribute("form") ConvertInputForm inputForm, Model model, BindingResult bindingResult) { if (inputForm.getAttachFile() == null || inputForm.getAttachFile().isEmpty()) { bindingResult.reject("FileSelected", "파일을 다시 선택하세요."); } if (bindingResult.hasErrors()) { return "[위에 작성된 html]"; } ... }ConvertInputForm은 다음과 같이 작성했습니다.@Data public class ConvertInputForm { private MultipartFile attachFile; @NotEmpty private String version; }위와 같이 코드를 작성하고 돌린 다음 파일을 선택하지 않고 버튼을 눌렀습니다.버튼을 눌렀을때 제가 기대한 결과는 bindingResult에 reject("FileSelected", "파일을 다시 선택하세요.") 가 들어가고 html에서 ${#fields.globalErrors() 를 통해서 메시지를 받는 것입니다.그런데 실제 결과는 버튼을 눌렀을때 다음과 같은 에러가 발생합니다.org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#fields.hasGlobalErrors()"구글링해보면서 해결해보려고 해도 모르겠습니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이 경우에는 어떻게 하나요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]저희가 보았던 인증은 /add/items에 접근을 할 수 있느냐 없느냐 였구 이 과정에서 interceptor에서 걸렀습니다.그런데 자신만의 page에서는 동작 방식이 어떻게 되나요?예를 들면 제 아이디가 dionisos198이니까 dionisos198만 수정 가능한 아이디 변경이라던가 이런 것이요.어떤 과정이 일어나는 것인가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 인터셉터 API 인증 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]postman에서 제가 logout api를 직접 만들어 봤습니다.근데 밑 화면에 보면 cookies가 그대로 살아있습니다. 왜 그럴까요?로그인을 하고 다른 api 호출하면 잘 되고 이렇게 로그 아웃 api 호출하고 다른 api호출하면 안되는 상황입니다. 즉 로그아웃 api를 잘 구현한 것 같습니다. 근데 왜 로그아웃 api 호출한 이후에도 밑에 cookies가 남아있을까요?저것의 의미가 response에서 받은 쿠키 얘기 하는 것아닌가요?response.addCookie안에 setMaxage가 0인것으로 갈아껴서 그거 나타내는 것일까요? 그리고 실무에서 api를 통해서는 이렇게 log in,log out 구현하는거 맞을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
API 인증 실험 중 궁금한 거 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]postman으로 필터를 통한 API인증을 실험해 보고 있었습니다.위 그림처럼 /api/items/api/add 를 하면 인증이 안되어야 하므로 뭐 튕기거나 그런 것은 이해 가능인데 Cookies는 대체 왜 생기는 건가요!
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
쿠키와 세션의 관계에 대해서
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]세션안에 쿠키가 사용된다 하셔가지고 sessionId와 value가 무슨 관계가 있나? 생각했습니다.저희가 직접 만든 session이용 파트에서 SessionManager의 코드 중Cookie MySessionCookie=new Cookie(SESSION_COOKIE_NAME,sessionID)가 있습니다.그래서 HttpSession 에서 실험해 보았는데요. session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember); System.out.println(session.getId()); System.out.println(session.getAttribute(SessionConst.LOGIN_MEMBER)); Cookie []cookie=request.getCookies(); for(int i=0;i<cookie.length;i++){ System.out.println(cookie[i].getValue()); System.out.println(cookie[i].getName()); } 이거로요.0BF73A108D2A8687E85F4D84FF0BD3FF->sessionID21BCD10FFBAA82EDCBF8D917BCEC0BE8->쿠키의 값 value 인데왜 둘이 다른 걸까요?쿠키와 세션의 관계가 헷갈리네요.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[Validation] MultiPartFile에 자동으로 적용된 @NotNull
우선 저는 다음과 같이 MultipartFile을 받도록 작성했습니다.@RequestParam MultipartFile attachFile그리고 attachFile에 마우스를 대보았더니 다음과 같이 뜹니다.위처럼 @NotNull 이라는 annotation이 들어간 것을 확인할 수 있었습니다. 하지만 이 @NotNull이 javax.validation 것인지는 알 수가 없었습니다. 또한 @RequestParam의 required의 default가 true라서 그런가 싶어서 false로 지정해도 @NotNull은 사라지지 않았습니다.Null 인 경우는 파일을 선택하지 않았을때 밖에 생각이 안드는데요. 이때 당연하겠지만 오류 페이지로 넘어가게됩니다.저 @NotNull의 정체가 무엇인지 알고 싶습니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증 1, 2 관련 질문들
errors.properties에 args로 max나 range로 숫자를 넘길때 ","가 자동으로 추가됩니다. 예를 들어서 min={0} 이상이어야 합니다. 라고 Message를 설정했을때 화면에 "1,000 이상이어야 합니다." 라고 뜹니다. 하지만 저는 "1000 이상이어야 합니다." 라고 "," 없이 표현하고 싶습니다. 그렇다면 어떻게 수정해야할까요? max, range와 같은 경우에 Args를 넘기고 {0}, {1} 과 같이 설정한 메시지에서 받을 수 있었는데 typeMisMatch일때는 Args를 어떻게 넘겨 받을 수 있는지 알고 싶습니다. @ModelAttribute DTO 를 사용하지 않고 @RequestParam으로 하나의 객체를 받아올 때는 어떻게 validation 할 수 있을까요? 예를 들어서 @RequestParam MultipartFile attachFile 과 같이 attachFile이라는 객체만 받는다고 했을때 어떻게 validation 해야하나요? 객체가 하나라도 DTO를 만드는게 좋을까요 아니면 그냥 if 문을 활용해서 Model.addattribute로 넘기는게 좋을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@RequestBody, BindingResult 질문드립니다.
안녕하세요.질문 하나 드리겠습니다.아래와 같은 controller 메서드가 있습니다.public String test(@RequestBody TestDto testDto) {}TestDto안에는 int 타입의 age이란 필드가 있는데요 { "age": "1234a"}이런식으로 요청을 넘겨주면TestDto 바인딩 과정에서 문자로 인한 에러가 발생합니다.저는 이때 이 예외를 감지해서 "나이는 숫자만 입력 가능합니다."이런식으로 메시지를 반환해 주고 싶은데요BindingResult를 사용해보니 @ModelAttribute에서만 가능한 것 같습니다. @RequestBody 사용시 이렇게 바인딩 오류가발생하는 경우를 제어할 수 있는 방법이 있을까요? 답변 부탁드립니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 예외 처리 - 오류 페이지 작동원리 중 WAS에서 request에 담아주는 정보들
강의 자료에 다음과 같이 되어있습니다.그런데 스프링부트 3.10버전에 java 17을 쓰고 있는데요, 저는 일단 xxxxxx_ATTRIBUTE로 해야 되네요,그리고 javax. xxx 가 아닌 jakarta로 하니까 되는데, 혹시 제가 잘못찾은걸까요? 버전의 문제일까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Mac에서 한글깨짐 문제
강의 자료 PDF 파일2. messages.properties위처럼 mac에서 파일을 다운로드 받으면 한글이 저렇게 깨지는데 어떻게 해결할 수 있을까요? apple에 물어보니까 작성한 사람의 한글 표현 방식이 달라서 그런다고 자기네 잘못은 아니라네요 ㅎ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서버검증과 클라이언트검증
서버 검증에서도 오류 문구를 뷰에 나타내고클라이언트검증에서도 오류 문구를 뷰에 나타내지 않나요? 제가 잘못 알고있는 것인지 아니면 모두 사용하는 건지.. 검증 두가지를 섞어써야한다고 하셨는데 문구는 어떻게 처리하는지 궁금합니다!
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ScriptAssert 스프링 3.0.1 이상 / jdk 17 버전 이상 실행 불가 임시방편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 내쉬혼 자바스크립트 런타임이 이제 jdk 17에서부터 deprecated 되면서 더이상 지원을 하지 않게 됬지만그래들로 임시방편이더라도build.gradle에 implementation ("org.openjdk.nashorn:nashorn-core:15.3") 로 강제로 연명은 아직 가능합니다..근데 내쉬혼이 현 자바스크립트 런타임이랑은 좀 머니최신 자바스크립트 런타임 가진 graalVM 을 임포트해 와서 CustomScriptAssertValidator 클래스를 만들어 @Bean 등록을 하고 싶은데 어렵네요..
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
해당 강의 중 validation의 다른 front-end platform활용 효율
========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 :)validation파트 강의를 듣는 도중 bindingResult, FieldError등 SSR기술을 활용한 thymleaf, jsp와 같이 하나의 project에 front, back-end가 같이 설정되어 사용하는 경우에만 해당 기술 활용 시 제일 효율적이고 다른 vue, react.js같은 경우에는 해당 기술을 활용하기 어려울 것으로 판단이 되는데요 맞을까요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
동작 원리에 대한 접근 방법에 대해 알고 싶습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]spring-boot-starter-validation 라이브러리가 Spring Boot에서 LocalValidatorFactoryBean을 글로벌 Validator로 등록해서 애노테이션 검증을 수행한다라는 내용에 대해 말씀해주셨습니다.영한님께서 이런 동작 원리에 대해 접근하실 때 어떻게 접근하시는지요? 동작 원리에 대해서는 공식 문서에서도 찾기가 힘들지 않나 싶습니다. 영한님의 접근 방식을 알고 싶습니다. External Libraries에서 의존성 라이브러리 안에 있는 클래스를 보신다던지.. 직접 IDE로 디버깅을 해보신다던지..감사합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 업로드 질문(multipart/form-data)
@PostMapping(value = "/upload") public ResponseEntity<String> saveFile(@RequestPart List<MultipartFile> files) { log.info("files={}", files); if (files==null || files.isEmpty()) { // 파일이 없는 경우 check JSONObject response = new JSONObject(); response.put("message", "Fail! Re-upload the file"); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response.toString()); } //정상 로직 } 안녕하세요. 영한 님 강의 보고 따라서 한 번 해보고 혼자 해보다가 궁금한 게 생겨 질문드립니다.여러 개의 파일을 업로드 할 수 있게 List 타입으로 받았고 만약 업로드한 파일이 없다면 if 문을 탈 수 있게 예외 처리를 했습니다.현재 포스트맨으로-headers의 content-type을 Multipart/form-data-body의 key에는 "files"를 value에는 파일을 선택하지 않고 테스트하고 있습니다.그럼 당연히 files는 비었을 것이라고 전제를 두었지만, 디버깅해 보니 if 문이 false를 반환하고 files[0]=""(빈 문자열)을 뱉어내고 정상 로직을 수행하더군요.여기서 질문이 있습니다.1. value에 파일을 선택하지 않았다고 해서 빈 파일이 생기는 것이 아닌 포스트맨에서 자체 동작으로 빈 파일 = 빈 문자열로 대체해서 넣어주는 지 (제가 포스트맨 동작 방식을 모르고 있는 걸까요?)2. 빈 파일을 보내면 Multipart/form-data의 요청 특성으로 빈 문자열("")이 전송되는 걸까요? 이게 맞는다면 멀티파트 형식을 유지하기 위해 빈 파일이나 빈 파트가 생성되어 전송되는 것일까요?3. list 타입 대신 하나씩 file을 받아오는 게 좋을까요?강의를 볼 땐 이해가 되면서도, 뭐가 맞는지 헤매고 있습니다..코드면에서 문제였다면, 키워드라도 알려주시면 찾아보겠습니다.긴 글 읽어주셔서 감사합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
url 패스 관련 질문
다른 질문을 봤을 때url : localhost:8080/abc/def?param1=data1¶m2=data2위와 같이 경로를 지정하고 싶으면 변수를 추가해야 한다고 봤습니다.@GetMapping("link")public String link(Model model) {model.addAttribute("param1", "data1");model.addAttribute("param2", "data2");model.addAttribute("url1", "abc");model.addAttribute("url2", "def");return "basic/link";}위에서와 같이 모델에 값을 새로 추가해주고<li><a th:href="@{/hello/{url1}/{url2}(url1=${url1}, url2=${url2}, param1=${param1}, param2=${param2})}">위와 같이 html에서 값을 넣는 방식이 결과적으론 원하는 값이 출력되긴 했지만 Q.1) () 안에서 변수와 같은 값이 있다면 해당 변수에 대 값을 대입하는 것으로 사용되는 것이고, 없다면 parameter값으로 사용되는 것인지 궁금합니다.Q.2 ) 이렇게 사용하는 것이 맞는지와 실제로도 실무에서 이렇게 사용하는지 빈도가 높은지 궁금합니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
한글, 한국 기준으로 나오는 이유
유틸리티 객체와 날짜 강의에서 temporals를 사용해서 날짜와 시간들을 찍어보았는데요. 신기하게도 한국 기준으로 한글로 나오더라구요. 어떻게해서 이렇게 나오는건가요? 만약 다른 나라 기준으로 찍고 싶다면 어떻게 해야하나요?