월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC 작동순서가 맞는지 확인 부탁드립니다!
@Controller @RequestMapping("/springmvc/v3/members") public class SpringMemberControllerV3 { private MemberRepository memberRepository = MemberRepository.getInstance(); @GetMapping("/new-form") public String newForm() { return "new-form"; } } 핸들러 조회: 클라이언트로부터 /springmvc/v3/members/new-form에 대한 GET 요청이 들어오면, 스프링 MVC는 @RequestMapping("/springmvc/v3/members")과 @GetMapping("/new-form")을 통해 이 요청을 처리할 SpringMemberControllerV3 클래스의 newForm() 메소드를 핸들러로 결정합니다.핸들러를 처리할 수 있는 핸들러 어댑터 조회: 스프링은 결정된 핸들러(컨트롤러의 메소드)를 실행할 수 있는 핸들러 어댑터를 찾습니다. 스프링 MVC에는 여러 종류의 핸들러 어댑터가 있으며, 이 경우에는 RequestMappingHandlerAdapter가 사용됩니다.handle(): 핸들러 어댑터는 핸들러 메소드(newForm())를 호출하는 handle() 메소드를 실행합니다.handler(controller) 호출: newForm() 메소드가 호출되어 실행됩니다. 이 메소드는 뷰의 이름을 문자열로 반환합니다. 여기서는 "new-form"이 반환됩니다.ModelAndView 반환: 이 예제에서는 단순히 뷰 이름을 문자열로 반환합니다. 스프링 MVC는 이 문자열을 바탕으로 ModelAndView 객체를 내부적으로 생성하며, 모델 데이터는 비어 있고, 뷰 이름은 "new-form"입니다.ViewResolver 호출: 반환된 뷰 이름 "new-form"을 기반으로 ViewResolver가 호출됩니다. ViewResolver의 역할은 뷰 이름을 실제 뷰 객체로 변환하는 것입니다. 스프링 MVC에서는 InternalResourceViewResolver 등 다양한 ViewResolver 구현체를 사용할 수 있으며, 이는 보통 applicationContext.xml 혹은 @Configuration 설정 클래스에서 설정됩니다.View 반환: ViewResolver는 요청된 뷰 이름에 해당하는 실제 뷰 객체를 찾아 반환합니다. 예를 들어, JSP를 사용하는 경우, "new-form" 이름은 /WEB-INF/views/new-form.jsp 파일에 해당하는 JstlView 객체로 해석될 수 있습니다.render(model) 호출: 뷰 객체는 ModelAndView에서 제공하는 모델 데이터(이 예제에서는 비어 있음)를 사용하여 뷰를 렌더링합니다. 렌더링 과정에서 최종적으로 클라이언트에게 보낼 HTML이 생성됩니다.HTML 응답: 생성된 HTML이 클라이언트에게 응답으로 전송됩니다. 클라이언트는 이 HTML을 받아 브라우저에서 렌더링합니다. MVC의 대략적인 개념을 위와 같이 이해하면 될까요? (gpt가 정리해준건데 정확한지 모르겠습니다 ㅠ)
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@PathVariable을 이용한 getMapping 사용시
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Get 요청 특성상 URL에 개인정보가 들어가게 되면 보안상에 큰 문제가 없을까요? 실무 환경에서도 유저 ID같은 정보를 전달할때 PathVariable을 사용하는지 궁금합니다.
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션2-2. Hello 서블릿 진행 중 WhiteLabel 에러 관련 질문입니다.
섹션 2-2. Hello 서블릿 강의 진행중에 /hello 접근 시 WhiteLabel 에러가 발생합니다.업데이트된 매뉴얼에 따라 현재 Build and Run 항목은 모두 Gradle으로 설정되어 있으며, 자바 21, 17 버전 모두 같은 문제가 발생하고 있습니다.@ServletComponentScan //서블릿 자동 등록 @SpringBootApplication public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } }@WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet.service"); } }같은 문제 관련하여 질문 글들 확인 및 시도해봤습니다만 해결이 되지 않았습니다.콘솔창에도 아무것도 출력되지 않네요.답변주시면 감사하겠습니다!
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam, @ModelAttribute 생략 규칙을 개발자가 생각하면서 개발해야 하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 내용이 개발자가 고려할 건 아니고, 그냥 스프링이 내부적으로 동작하는데 있어서 규칙을 지정한 것이라고 이해했는데 맞나요?개발자가 이것을 구분하면서 개발해야 하는지에 대해 생각해보다가, 굳이 그럴 필요는 없는것 같아서요! 그냥 스프링의 내부 동작 방식으로 이해하면 되겠죠ㅎ?
- 미해결스프링 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 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 1편 - 백엔드 웹 개발 핵심 기술
HttpEntity를 특별히 사용해야만 하는 상황이나 사용할떄의 장점이 있나요?
지금 설명으로는 @RequestBody만 사용하는게 보기도 깔끔하고 반환도 스트링 형, 객체형 다 가능해서 유연성이 더 높은것 같은데 특별히 HttpEntity만을 사용하는 이유가 있나요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실무에서 http에 텍스트를 보내고 받는 경우가 있나요?
바디에 JSON 데이터를 담아서 통신는게 대부분인것 같은데 실무에서 텍스트를 주고 받는 경우가 있나요? 그리고 수업 내용이 점진적으로 버전이 증가하면서 이해를 도와주시는데 최종버전이 실무에서 가장 많이 사용되고 지향하는 방법이라 최종 버전만 이해하여도 큰 문제는 없나요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Mvc구조에서 뷰를 반환하지 않고 json을 반환하려면 어디서 구조 변경이 일어나나요?
스프링 Mvc구조를 설명해주실때 4번 핸들러 호출 이후 5번 ModelAndView를 반환한다고 되어 있는데 모델과 뷰애서 모델은 ssr에서 사용할 데이터들이 담겨 있는 모델에서 데이터를 꺼내어서 타임리프나 jsp 에서 사용할 수 있도록 데이터가 담긴 박스를 반환해주는 것이고 뷰는(타임리프를 사용한다고 할 때) 어떤 html에 모델을 넘겨줄것인지 결정해주는 부분으로 이해하였습니다. 이 방법은 앱 클라이언트처럼 json형식으로 데이터를 반환해야 하는 클라이언트를 이용할 때는 사용하지 못하는 방법으로 이해가 되는데 (json데이터를 요구하는 클라이언트에게는 뷰를 반환하여도 의미가 없는 데이터 이기 때문에) 어디서 구조를 변경해야 json 데이터를 반환해 줄 수 있는건가요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 프로젝트 초기 세팅을 initializer 웹페이지를 통해 하는 이유가 있나요??
인텔리제이에서 새로운 프로젝트를 열 때, spring initializer를 선택하면 initializer페이지와 같은 항목이 뜨는데 인텔리제이에서 세팅하는 것 보다 사이트를 이용할 때 장점이 있을까요??
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
http 메시지 컨버터 호출에 대해 질문드립니다.
안녕하세요.다른 학생분들의 질문 중https://www.inflearn.com/questions/858726/%EC%A0%9C%EA%B0%80-%EC%83%9D%EA%B0%81%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94-%EB%8F%99%EC%9E%91%EA%B3%BC%EC%A0%95-%ED%94%BC%EB%93%9C%EB%B0%B1%EC%9D%84-%EB%B6%80%ED%83%81%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4이 글을 보았습니다. 6-2. 위의 경우가 아니면, ReturnValueHandler는 반환 값의 타입에 따라 적절한 HttpMessengerConverter를 통해 응답 메세지를 생성 후, ... 라고 되어있는데,@ResponseBody가 붙어있지않거나 HttpEntity 객체를 반환하는게 아니라면, ReturnValueHandler가 굳이 HttpMessgeConverter 를 호출하지않아도 되지않나요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
V5 회원등록 404 오류
/front-controller/v5/v3로 바꾸어도 안되어서요.도움 주시면 감사하겠습니다. https://drive.google.com/file/d/1JVYX7_d3zUXJIrh2xICiBdLCFaufUCBR/view?usp=sharing
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Ssr을 이용하면서 csr도 같이 이용할 수 있나요?
Sar은 서버에서 백엔드 개발자가 직접 화면을 보여주기 위해 사용하고Csr은 프론트 개발자가 서버로부터 받은 api를 이용하여 클라이언트에서 직접 화면을 보여주는 기능으로 이해하였습니다.이때 ssr만을 이용하여 프론트엔드 개발자 없이 웹을 개발할. 수 있고 csr을 이용하려면 백엔드 개발자는 ssr을 사용하지 않고 반환되는 api만 프론트 개발자에게 잘 전달해주면 되는건가요? 그렇다면 csr을 이용하는 프론트 개발자와 같이 협업을 한다면 백엔드 개발자는 ssr을 이용할 필요 없이 json만 잘 전달해주면 되는것 이고 굳이 ssr, csr을 같은 프로젝트에서 사용할 이유는 없는건가요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프를 이용해 동적으로 html을 생성하기전 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.동영상 7분경에 나오는 localhost:8080/basic/items페이지가 에러가 뜹니다. 강의에 나온 내용을 모두 동일하게 따라갔는데 이유를 모르겠습니다
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰에 대해 질문 있습니다.
안녕하세요.강의교재 6. 스프링 MVC - 기본기능의 38페이지에뷰 템플릿뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어서 전달한다.라고 되어있습니다. 제가 이해하기로는 디스패처 서블릿이 render(model)을 호출함으로써 뷰가 만들어지고 이를 클라이언트로 서블릿이 보내는 것으로 알고 있었어서,'뷰가 응답을 만들어서 전달한다' 라는 말이 이해가 되지 않습니다. 설명해주시면 감사하겠습니다!!
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
8:16초 컨트롤러의 파라미터에 질문이 있습니다.
이전 버전에서는 파라미터로 HttpServletRequest와 Response를 받았는데 V3버전부터 반환을 ModelView로 하는 이유와 그 파라미터로 맵이 사용되는 이유 그리고 맵의 키 벨류가 String 인데 각각이 어떤 값이 매칭되는건지 이해가 안됩니다. 지금 다시 복습하는 부분인데 다시 봐도 모르곘습니다…
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
쿼리파라미터 타임리프 param에 대해 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]<h2 th:if="${param.status}" th:text="'저장 완료'"></h2>이거와 같이 status를 모델에 안담고 바로 사용하는 것을 볼 수 있는데 그럼 item객체 모델도 model.addattribute 사용 안하고 바로 html에서 ${param.item.id}로 사용 할 수 있나요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
redirect 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품등록과 상품수정코드에서 redirect부분코드를 보면@PostMapping("/add") public String addItemV5(Item item) { itemRepository.save(item); return "redirect:/basic/items/" + item.getId(); } @PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @ModelAttribute Item item) { itemRepository.update(itemId, item); return "redirect:/basic/items/{itemId}"; }이렇게 배웠는데 상품등록폼에서 리다이렉트로 상품 수정처럼 @PathVariable 해주고 리다리렉트를 시키니 오류가 납니다. 이런식으로는 못하는건가요? @PostMapping("/add") public String addItemV5(@PathVariable Long itemId, Item item) { itemRepository.save(item); return "redirect:/basic/items/{itemId}"; } 안되는이유가 혹시 addForm.html에서 itemid로 넘겨주는 요청이 없어서 인가요? 더 자세하게 알려주시면 감사하겠습니다!