묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
spl 최신버전으로 설정방법 영상으로 올려주실 수 있나요?
ppt에 있는거 너무 옛날거라 인터페이스가 다릅니다. 영상으로 spl 최신버전 설치 및 실행 방법 좀 올려주시면 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만약에 여러사람과 협업한다고 가정시에
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.저 뿐만이 아닌 다른 여러사람과 협업한다고 가정 시에 각자 자신의 프로젝트 루트가 다를 텐데 application.properties에 선생님과 똑같게 경로를 지정하면 이게 모두에게 적용이 되느건가요?? 아니면 뭔가 다른 방식으로 접근해야 되나요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
api 예외처리 시작 프로그램 오류
postman에서 http://localhost:8080/api/members/ex 를 입력하면 인텔리제이 콘솔에 아래와 같은 오류 메세지가 뜹니다. api 예외처리 - 시작 첫번째 예시 프로그램입니다.(소스는 교유자료 그대로 카피했습니다.)부트 3.2.4. 자바 17 입니다.https://drive.google.com/file/d/1dF6tbyoy58KHPVdXYeiMYbGkPqnD9HVy/view?usp=sharing 2024-04-13T11:04:18.249+09:00 ERROR 12968 --- [exception] [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost] : Exception Processing [ErrorPage[exceptionType=java.lang.RuntimeException, location=/error-page/500]]jakarta.servlet.ServletException: Request processing failed: java.lang.NullPointerException: Cannot invoke "java.lang.Exception.getMessage()" because "ex" is null 디버그를 잡아보면 @RequestMapping(value = "/error-page/500", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Map<String, Object>> errorPage500Api(HttpServletRequest request, HttpServletResponse response) { log.info("API errorPage 500"); Map<String, Object> result = new HashMap<>(); Exception ex = (Exception) request.getAttribute(ERROR_EXCEPTION);여기가지 실행하면 ex에 null 이 나옵니다. 이거 때문에 오류가 나는데 이유가 뭘까요? 그래서 status만 찍게 했더니 500 이 아니라 null이 출력되네요?API errorPage 500ERROR_EXCEPTION: ex=ERROR_EXCEPTION_TYPE: nullERROR_MESSAGE: nullERROR_REQUEST_URI: nullERROR_SERVLET_NAME: nullERROR_STATUS_CODE: null
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프로젝트 소스코드 실행 시 404 에러 발생
안녕하세요 현재 JSP로 회원관리 웹 애플리케이션 만들기를 수강 중인데index.html이나 jsp 파일이 웹에 뜨지 않습니다.올려주신 소스코드 그대로 실행해보아도 404 에러가 발생합니다.소스코드에서 에러가 발생하므로 파일은 올리지 않았습니다.에러 내용은 아래와 같습니다. 2024-04-13 00:36:39.313 DEBUG 8684 --- [nio-8080-exec-5] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@16a42a0c:org.apache.tomcat.util.net.NioChannel@5509b3ab:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:57012]], Status in: [OPEN_READ], State out: [CLOSED] 2024-04-13 00:36:39.313 DEBUG 8684 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CONNECTION_NOW] reported while processing request java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1322) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1232) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:791) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:359) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] 2024-04-13 00:36:39.315 DEBUG 8684 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@59a6df3:org.apache.tomcat.util.net.NioChannel@2648df3d:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:57013]], Status in: [OPEN_READ], State out: [CLOSED] <- urlPatterns로 지정해놓은 url은 실행됩니다
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
레이아웃 파일에 <!DOCTYPE html> 선언이 안 되어 있는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]1. 타임리프 - 기본 기능.pdf(v20240408)에서45 페이지에 있는 base.html 코드를 보면 <!DOCTYPE html> 이게 선언되어 있지 않은데 레이아웃 파일엔 안 써도 되는 건가요? 혹시 써야 하는데 빠진 거일지도 몰라서 제보합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA교재
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요JPA강의를 들을려고하는데 따로 구매해야할 교재가있나요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController 오류 질문(addAttribute 오류)
package hello.hellospring.controller; import ch.qos.logback.core.model.Model; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; } 위에 사진 처럼 addAttribute에 빨간 줄이 떴는데 얘는 어떻게 하나요? Cannot resolve method 'addAttribute' in 'Model'오류 코드입니다.C:\Users\kimga\OneDrive\바탕 화면\hello\hello-spring\src\main\java\hello\hellospring\controller\HelloController.java:12:13java: cannot find symbolsymbol: method addAttribute(java.lang.String,java.lang.String)location: variable model of type ch.qos.logback.core.model.Model
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
컨트롤러에서 리다이렉트를 해주는건 ssr을 이용할때만 고려하면 되는 건가요?
Ssr을 이용할때는 직접 뷰를 이동하는 거니 백엔드 개발자가 리다이렉트도 처리를 해주어야 하는데 csr을 이용하여 json으로 통신할때는 백엔드 개발자는 데이터만 잘 넘겨주는것이 끝이기 떄문에 리다이렉트 관련 내용은 프론트 개발자가 해결하는 부분 인가요?그리고 @ModelAttribute와 파라미터에 사용되는 Model 객체에서 @ModelAttribute 는 Item 클래스의 멤버 변수를 세팅해주는것이기 때문에 csr을 이용하여 웹 개발을 할 때 return item 을 하여 객체가 json으로 변환되어 클라이언트에게 전달되니 @ModelAttribute 는 csr을 이용할때도 사용되는 어노테이션이고 Model객체의 model.addAttribute()는 ssr의 뷰 영역에서 사용될 데이터를 넘겨주는 기능이라서 csr을 이용할때는 사용을 안하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링의 Model 를 뷰로 전달하는 원리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링이 제공하는 Model 을 사용할때, 인자로 받아와서 사용하는 것을 보았습니다. 예전에 "스프링 없이 mvc 패턴 구현하기" v4 에서는 모델값을 요청 객체에 담아서 뷰.render(req, res) 이런식으로 넘겨주었는데요, 이것도 유사한 방식으로, 스프링에 의해 모델 객체가 자동으로 요청 객체에 담겨서 뷰로 전달되는걸까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[공유]스프링 3버전 부터는 강의내용의 jstl 버전이 정상동작하지 않습니다
mvc -> member 목록 조회시 500 에러나시는분들..jsp 내용은 그냥 지나쳐도 된다하시지만.. 에러나는게 신경쓰여서 찾아보니 gradle 의존성에 넣은 jstl 버전이 낮아서 500에러를 뱉더군요 의존성을 아래와 같이 변경하시고 gradle 재시작, 프로젝트 다시 빌드하시면 정상동작합니다. //JSP implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl:3.0.1' implementation 'jakarta.servlet:jakarta.servlet-api' implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
버전 2.7.18 으로 자바 11 맞추어서 하면 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.동영상에는 2.3.1 에 자바 11이던데버전 2.7.18 으로 자바 11 맞추어서 하면 될까요? 일단 돌아가긴 하는거 같습니다.... 하도 버전 맞추는데 시간이 많이걸려서 확인하고 할까합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HttpEntity를 특별히 사용해야만 하는 상황이나 사용할떄의 장점이 있나요?
지금 설명으로는 @RequestBody만 사용하는게 보기도 깔끔하고 반환도 스트링 형, 객체형 다 가능해서 유연성이 더 높은것 같은데 특별히 HttpEntity만을 사용하는 이유가 있나요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
5. 데이터 접근 기술 - JPA.pdf 11쪽
JPA가 만들어서 실행한 SQL select item0_.id as id1_0_0_, item0_.item_name as item_nam2_0_0_, item0_.price as price3_0_0_, item0_.quantity as quantity4_0_0_ from item item0_ where item0_.id=? item_nam2_0_0_ -> item_name2_0_0_ 이렇게 수정하는 것이 맞지 않은가요?item_nam2_0_0_ <- 이것이 맞다면, sql으로 변환되는 기준에 대해서 여쭈어보고자 합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인라인을 사용할 때의 이스케이프 처리와 인라인을 안 쓸 때의 이스케이프 처리 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@GetMapping("/javascript") public String javascript(Model model) { model.addAttribute("user", new User("user\"A\"", 10)); addUsers(model); return "basic/javascript"; }컨트롤러에선 위 코드에 나온 대로 model.addAttribute("user", new User("user\"A\"", 10));이렇게 한 다음, javascript.html은<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script type="text/javascript"> var username = "[[${user.username}]]"; document.write(username); </script> <script th:inline="javascript" type="text/javascript"> var username = [[${user.username}]]; document.write(username); </script> </body> </html>이렇게 수정했습니다.(자바스크립트를 제대로 배운 게 아니라서 이렇게 코드를 짜도 되는지 모르겠습니다.) 서버를 실행하면인라인 사용 전이나 후나 똑같이user"A"이렇게 보입니다. 페이지 소스 보기를 누르면이렇게 뜹니다. 인라인 사용 전이나 사용 후 모두 이스케이프 처리된 거 아닌가요? 인라인을 사용하지 않아도 이스케이프 처리를 해 주는데, 자바스크립트 인라인을 사용해서 다른 모양(?)으로 이스케이프 처리를 해 주는 이유가 궁금합니다. 인라인을 사용하지 않은 이스케이프 처리는 문제가 생길 수 있나요?(혹시 HTML Entity는 HTML 코드 작성 부분에서만 생겨도 되고, 자바스크립트 코드 안에선 생기면 HTML Entity가 생기면 안 되는 건가요?) 이스케이프를 HTML Entity로 처리하는 것과 자바스크립트 인라인을 통해 이스케이프 처리를 하는 건 어떻게 다른지 궁금합니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
check에 controller의 의미?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Test void checked() { Controller controller = new Controller(); assertThatThrownBy(() -> controller.request()) .isInstanceOf(Exception.class); } @Test void checked2() { Service service = new Service(); assertThatThrownBy(() -> service.logic()) .isInstanceOf(Exception.class); }컨트롤러를 만들어서 하지 않고 그냥 서비스에서 테스트해도 되는데, 컨트롤러를 만들어서 하는 이유는 뭔지 궁금합니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
home.html이 아닌 index.html이 랜딩됩니다
안녕하세요.회원관리 - 웹MVC개발 부분 강의 듣고 차근차근 따라가고 있었는데home.html이 아닌 자꾸 index.html이 랜딩됩니다.. 기존에 질문해주셨던 분의 글이 있길래 봤는데 해결이 안되어서요 ...구글 사용기록 전체기간을 삭제 -> 실패 index.html에 <meta charset="UTF-8" content="no-cache, no-store, must-revalidate"> 태그 넣어봄 -> 실패home.html에 태그 넣어봄 -> 실패구글 시크릿 모드에서 접속 -> 실패서버도 잘 올라가는데.. 고민하다가 질문 글 작성합니다 ㅜㅜ 파일 위치는 아래와 같이 하고 있었습니다.. HomeControllerhome.htmlindex.html
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
command+n 시 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]command + n을 했을때 강사님 처럼 class,interface를 지정할 수 있는 항목이 안뜹니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실무에서 http에 텍스트를 보내고 받는 경우가 있나요?
바디에 JSON 데이터를 담아서 통신는게 대부분인것 같은데 실무에서 텍스트를 주고 받는 경우가 있나요? 그리고 수업 내용이 점진적으로 버전이 증가하면서 이해를 도와주시는데 최종버전이 실무에서 가장 많이 사용되고 지향하는 방법이라 최종 버전만 이해하여도 큰 문제는 없나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바스크립트 주석과 HTML 주석의 차이?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]<!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>이 코드에서 '자바스크립트 내추럴 템플릿' 부분에 있는 주석에 대해 궁금한 점이 있습니다. 서버를 실행한 후 페이지 소스 보기를 누르면주석 사이에 [[${user.username}]]가 아닌 userA가 보입니다. 그런데 이전의 주석 강의에선똑같이 서버 실행 후 페이지 소스 보기를 눌렀는데 ${data} 그대로인 채로 있습니다. 그래서 이번 강의에서도 주석 사이에 [[${user.username}]]로 되어 있을 줄 알았는데 userA로 변환이 되어 있더라고요. 강의에서 말씀해 주셨던 내용들 참고하면 "자바스크립트 코드는 서버에서 동작하지 않고, HTML 코드는 서버에서도 동작하며, 마찬가지로 자바스크립트 주석도 서버에선 동작하지 않고 HTML 주석은 서버에서도 동작한다." 이렇게 생각되긴 하는데 이 내용 때문이 맞는지, 그리고 이 내용에 오류가 없이 정확한지 확신이 안 들어서 질문드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
한번만 질문 봐주십쇼..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 검증 부분을 수강하고 프로젝트에 적용하는데 잘 모르겠는 부분이 생겨서 질문드립니다@PostMapping("/blog/post") public String addOrUpdate(@ModelAttribute RequestPost requestPost, BindingResult bindingResult, Model model){ requestPostValidation.validate(requestPost,bindingResult); if(bindingResult.hasErrors()){ System.out.println(bindingResult); model.addAttribute("post",requestPost); return "addOrUpdate"; } if(requestPost.getId()==null){ postService.savePost(requestPost.toPost()); return "redirect:/blog"; } else{ postService.updatePost(requestPost); ResponsePost post = new ResponsePost(postService.findById(requestPost.getId())); model.addAttribute("post",post); return "redirect:/blog/post/"+post.getId(); } }이게 컨트롤러부분이고 @Component public class RequestPostValidation implements Validator { @Override public boolean supports(Class<?> clazz) { return RequestPost.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { RequestPost requestPost = (RequestPost)target; if(!StringUtils.hasText(requestPost.getTitle())){ errors.rejectValue("title","noTitle"); } if(!StringUtils.hasText(requestPost.getContent())){ errors.rejectValue("content","noContent"); } } }이게 검증하는 클래스입니다noTitle.requestPost.title=제목은 필수입니다. noContent.requestPost.content=내용은 필수입니다.에러 메시지는 이렇게 만들어 줬구요<form action="/blog/post" method="POST" th:object="${post}"> <input type="text" th:value="${post.id}" name="id" style="visibility: hidden;"> <h3>제목</h3> <input th:if="${post.id==null}" type="text" placeholder="제목 입력하시오" th:value="${post.title}" name="title"> <input th:if="${post.id!=null}" type="text" th:value="${post.title}" name="title"> <div th:errors="*{title}"> 제목 오류 </div> <h3>내용</h3> <textarea th:if="${post.id==null}" placeholder="내용 입력하시오" th:text="${post.content}" name="content"></textarea> <textarea th:if="${post.id!=null}" th:text="${post.content}" name="content"></textarea> <div th:errors="*{content}"> 내용 오류 </div> <br> <div class="center"> <input th:if="${post.id==null}" type="submit" value="등록"> <input th:if="${post.id!=null}" type="submit" value="수정"> <input th:if="${post.id==null}" type="button" th:onclick="|location.href='@{/blog}'|" value="취소"> <input th:if="${post.id!=null}" type="button" th:onclick="|location.href='@{/blog/post/{id}(id=${post.id})}'|" value="취소"> </div> </form> 이게 뷰 부분입니다1.컨트롤러에서 @ModelAttribute RequestPost requestPost 를 통해서 form 정보를 받는데 @ModelAttribute니까 Model에 requestPost 객체가 저장된다고 알고 있습니다 2.그런데 뷰 에서 form이 th:object="${post}"로 되어있어서 model.addAttribute("post",requestPost)로 post이름으로 requestPost 객체를 넣었습니다 3.그럼 제 생각에는 Model에 post이름으로 requestPost 객체가 있으니까 th:object="${post}" 매핑되어서 th:errors="*{title}" 를 통해 title필드가 문제가 있으면 오류메시지가 출력될거라 생각했는데 안됩니다. 4.여러가지를 시도를 해봤는데 model.addAttribute("post",requestPost) 를 하지 않고 @ModelAttribute("post")RequestPost requestPost 를 하고 메시지를 noTitle.post.title=제목은 필수입니다. 로 바꾸니까 그제서야 출력이 되더라고요 5.이게 BindingResult랑 Model에 저장된 객체의 이름이 달라서 이런 일이 발생하는 건가요? 제 생각으로는 model.addAttribute("post",requestPost) 하면 Model에 이름이 post로 저장이 되서 th:object="${post}"랑 매핑은 되는데 th:errors="*{title}"이거는 post 이름으로 BindingResult에서 객체이름을 찾는데 제가 올린코드에서는 requestPost로 저장되어 있어서 못찾는 건가요? 질문을 깔끔하게 하려고 여러번 지웠다 썻다 하는데도 난잡해서 죄송합니다. 제일 궁금한건 컨트롤러에서 @ModelAttribute RequestPost requestPost,BindingResult bindingResult 이렇게 인자를 받고 model.addAttribute("post",requestPost) 해서 뷰로 넘겼을때 th:object="${post}"를 하면 post이름으로 객체를 찾아서 requestPost랑 매핑은 되는데 th:errors="*{title}"를 통해서 오류를 검사할때는 BindingResult에서 post이름으로 객체를 찾아서 오류 출력하는데 현재 BindingResult에는 requestPost로 객체이름이 저장되어 있으니까 출력하지 못하는 걸까요? 한번만 봐주시면 감사하겠습니다..