묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
스프링 부트와 JPA 활용 2 강의 듣던 중 로드맵이 궁금해서 질문남깁니다.
안녕하세요 현재 스프링 기초 강의 부터 JPA 기초, 실전 1 까지 들으며 야생형 로드맵을 따라가고 있습니다. 그런데 활용 2편 강의를 아직 초반밖에 보지 않았지만 중간중간 MVC 이야기를 하셔서 MVC 파트가 선행 되어야 하는건지 아니면 이 강의를 먼저 끝내고 들어도 되는건지 더 효율적인 학습 순서가 어떻게 되는지 알려주세요 ㅎㅎ
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
다운캐스팅에 대해서 질문이 있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]무지한 질문을 드려서 정말 죄송합니다. 다운캐스팅 하실때에 원래 업캐스팅을 진행하고 다운캐스팅이 가능한것으로 알고있는데 구글링을 해봐도 RequestServlet -> HttpServletRequest로 다운캐스팅 가능한 이유를 모르겠습니다.. 답변 해주시면 감사하겠습니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assertThat 오류
이번 강의에서 회원 서비스 테스트 클래스에서 assertThat 오류가 발생합니다. 다른 클래스에서 assertThat를 이용할 때는 잘 사용이 되었지만 이번 클래스에서는 오류가 뜨네요 오류 내용 The method assertThat(String, T, Matcher<? super T>) in the type Assert is not applicable for the arguments (String) 임포트 내용 구글링을 해서 많은 방법을 써봤지만 해결이 되지 않았습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
addItemV1 메소드 파라미터 타입 질문 드립니다.
addItemV1 메서드에서 @RequestParam으로 요청 파라미터 변수를 받을 때 price는 int 타입이고, quantity는 Integer 타입으로 선언하신 이유가 무엇인지 궁금합니다. @PostMapping("/add")public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model) { Item item = new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity); itemRepository.save(item); model.addAttribute("item",item); return "basic/item";}
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JSON 형식으로 파싱하는 이유?..
json도 문자라서 객체로 변환시켜주어야 된다고하셨는데 그이유가 궁금합니다.{"username":"jeong","age":"24"}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4분 20초에 동시성에 문제가 있을수 있다고 말씀해주셨는데요.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오[질문 내용]4분 20초에 실무에서는 동시성을 고려해야 할수 있다고 말씀해주셨는데요. 저코드에서 동시성에 관련된 문제가 어떻게 발생이 되는지 알려주시면 감사하게습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Rest API 로 받을 때의 검증에 대해 질문있습니다.
Bean Validation에서 발생한 @NotBlank, @Max 등을 이후 강의에 나오는 RestControllerAdvice에서 잡아서 handling 하는 방법도 있을까요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하세요 영한님 쿠키 관련 질문이 있습니다. :)
안녕하세요 영한님 :) 강의 정말 잘 듣고 있습니다. 다름이 아니라 질문이 있는데요 쿠키를 설정할 때 하위 도메인은 같이 쿠키가 공유 된다고 하셨었는데 하위 도메인이 아니라 아예 다른 도메인간에 쿠키를 공유하거나 다른 도메인에 쿠키를 설정할 수 도 있는 것인가요?? 안된다는 글도 봤었고 SameSite 속성을 None 으로 설정하면 된다는 것도 보았었는데 정말 다른 도메인간에 쿠키를 설정 또는 공유할 수 있는 것인지 궁금합니다. :) ex) exampleAAA.com exampleBBB.com 이렇게 서로 다른 도메인간 쿠키 공유 or 설정
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
run을 클릭할 때 실행이 되지 않아요
강의 내용 중 run을 실행시키는 부분에서 왼쪽에 화살표 모양이 나타나지 않습니다 상단에 있는 목록 중 run을 눌러 실행을 하면 밑의 이미지와 같은 문구만 나타납니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
사용되는 Servlet
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이번에 내용을 정리하면서 깨달은 사실이 맞는지 확인하고자 질문을 남깁니다. 원래 사용자의 요청이 들어오면 서블릿 컨테이너에서 해당되는 서블릿 객체를 꺼내서 사용한다고 알고 있습니다. 하지만 FrontController(DispatcherServlet)을 사용하여서 개발자는 컨트롤러만 작성하면 되었고 그 뜻은 실제로 사용되는 서블릿 객체는 위의 DispatcherServlet이 끝이라는 뜻인가요? 물론 저도 모르는 곳에서 이미 만들어진 Servlet이 사용될 수는 있지만 개발자가 따로 서블릿을 만드는 일이 별로 없는 것인지 궁금해서 질문을 남깁니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링에서 post를 막아놨다는 의미.
안녕하세요. '상품 서비스 html' 강의 6분 50초 쯤에 상품 등록할 때의 버튼이 동작 안했을 때 김영한 선생님이 말씀하시길, static 정적 리소스는 get일 때 받는 것으로 되어있따. 스프링에서 post를 막아놨다는 말은 무슨 뜻인가요? 단순 브라우저에서 열었기 때문에(브라우저는 다양한 http메서드를 지원하지 않아서 postman 으로 여러 메서드들을 확인하듯) post를 지원하지 않는다? 뭐 이런 의미랑 관련이 있나요 스프링에서 막아놨다는 말과, get일 때 받는 것으로 되어있다.. 등 여러 의미적인 면에서 이해가 잘 안되네요. 미리 감사드립니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Accept vs Content-Type
안녕하십니까 강사님 강의를 듣던 도중에 미디어 타입 조건 매핑에서 Accept와 Content-Type이 헷갈려서 질문드립니다. (Http 강의를 듣고 정리한 것도 보고 왔습니다) Accept는 클라이언트가 선호하는 표현을 요청하는 것으로 클라이언트 입장에서 응답을 받을 때, Accept헤더에 있는 데이터 타입이 오지 않으면 내가 말한 데이터가 아니잖아라고 거절을 하는 것이고, Content-Type은 해당 헤더에 있는 데이터가 오지 않았을 경우 서버 입장에서 내가 처리할 수 있는 데이터가 아닌데? 라고 거절을 하는 건가요?? Accept가 요청 때만 사용한다고 알고있어서 헷갈리게 되어 질문드립니다 감사합니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
웹애플리케이션 계층구조가 mvc를 설명한건가요?
안녕하세요. 자바입문 듣고 스프링 강의를 신청하여 김영한님 강의를 듣는데요. 일반적인 웹애플리케이션 계층구조 설명하시는데 이것이 MVC 패턴 설명하신건지? 아니면 비슷한것인가 궁금합니다. 또한 클래스 의존관계 설명에서 구현체란 단어를 사용하시던데 구현체라는게 무엇인지??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HTTP API와 자바스크립트 질문
질문에 앞서 제가 자바스크립트를 잘 모르고 HTML, CSS만 대충 알고 있습니다. 참고하시고 답변 부탁드릴게요. (질문) HTTP API는 HTML이 아닌 데이터를 주고 받기 때문에 "웹 브라우저"가 아닌 "웹 클라이언트 자바스크립트"가 데이터를 처리하고 사용자에게 보여준다고 하셨습니다. 여기에서 웹 클라이언트 자바스크립트가 구체적으로 뭔지 모르겠습니다. 자바 스크립트라는 프로그램이 개인 PC마다 설치되어 있는 건지... 조금 더 구체적으로 설명해주시면 감사하겠습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
CSR에 관해 질문드립니다.
안녕하세요. 항상 좋은 강의 감사드립니다. 제가 백엔드 쪽만 공부하다보니 프론트 쪽에 관해 많이 모르고 있는데요. 1. 강의에서 CSR에 대해서 설명해주신 부분에서 '서버'를 언급해주셨는데, 그 때의 서버는 리액트나 뷰와 같은 프론트단 서버를 의미하는 건가요? 그러면 CSR의 경우는 Spring 서버에 오기 전 클라이언트단 서버에서 이미 처리가 되고, 백단 서버에는 요청이 가지않는 상태를 의미하는건가요? 2. 전체적인 HTTP 흐름이 '클라이언트 -> 클라이언트단 서버 -> Spring 서버 -> DB -> 응답' 순이 맞을까요? 아니면 로직마다 다르게 적용되어 클라이언트 <-> 클라이언트단 서버, 클라이언트 <-> 백단 서버 이런식으로 요청, 응답을 받는건가요? 3. 그리고 제가 백엔드만 공부한 상태로 포트폴리오로 개인프로젝트를 혼자 개발해보려고 하는데요. 강의에서는 서버 사이드 렌더링 기술만 익히면 된다고 하셨는데, CSR 없이 타임리프와 spring으로만 개발해도 괜찮을까요? 백엔드 개발자가 개인프로젝트를 해야하는 할 때 갖춰야할 최소한의 프론트 지식이 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
왜 log.error가아닌 log.info를 사용하나요?
error 메세지의 경우 log.error가 아닌가요?ㅜㅜ 실제 개발할때 이런 에러 로그에 대해서 info를 사용하는지 error혹은 warn을 사용하는지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
FileNotFoundException 오류
아래 코드를 작성하고 난 후 나는 에러입니다. 강의 내용상으로는 30:47에 작성하신 코드입니다. @ResponseBody@GetMapping("/images/{filename}")public Resource downloadImage(@PathVariable String filename) throws MalformedURLException { return new UrlResource("file:" + fileStore.getFullPath(filename));} 2021-09-23 14:12:09.196 ERROR 2112 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception java.io.FileNotFoundException: URL [file:C:/Users/계정이름/Desktop/study/${imageFile.getStoreFileName()}] cannot be resolved in the file system for checking its content length at org.springframework.core.io.AbstractFileResolvingResource.contentLength(AbstractFileResolvingResource.java:232) ~[spring-core-5.3.9.jar:5.3.9] at org.springframework.http.converter.ResourceHttpMessageConverter.getContentLength(ResourceHttpMessageConverter.java:121) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.http.converter.ResourceHttpMessageConverter.getContentLength(ResourceHttpMessageConverter.java:45) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.http.converter.AbstractHttpMessageConverter.addDefaultHeaders(AbstractHttpMessageConverter.java:260) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:211) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:293) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:124) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.9.jar:5.3.9] at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.52.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.9.jar:5.3.9] at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.52.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 이런 에러가 납니다. 제가 윈도우 환경이라서 경로를 잘못 설정했을까봐 https://www.inflearn.com/questions/268366 이곳을 참고하여 application.properties 파일을 logging.level.org.apache.coyote.http11=debug file.dir=C:/Users/계정이름/Desktop/study/ 이렇게 작성했는데, 제출 버튼을 누르면 저렇게 오류가 납니다. 위 코드를 주석처리하고 실행해보면 잘 실행이 되는데, 위 코드를 작성하고 실행시키면 저렇게 에러가 나네요. 왜그런지 알 수 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
FrontControllerServletV3의 기능중 이해가 안되는 부분이 있습니다.
Map<String, String> paramMap = createParamMap(request);ModelView mv = controller.process(paramMap);String viewName = mv.getViewName();MyView view = viewResolver(viewName);view.render(mv.getModel(), request, response); 안녕하세요 위 소스에 대한 내용이 궁금해서 문의 드립니다. 제가 이해한대로 우선 설명을 드리면.. Map<String, String> paramMap = createParamMap(request); request에서 받아온 값들을 Key, Value 형식으로 paramMap에 담아주는 역할을 함.(key: username, value : 34)이런식으로 ModelView mv = controller.process(paramMap); 주소값에 따라 value에 저장되어있는 컨트롤러(ex> MemberListControllerV3에서 저장한 viewName을 반환해준다(안에 값이 있으면 같이 보내준다(컨트롤러의 기능에 따라 저장된 값들) String viewName = mv.getViewName(); 이 부분이 위의 mv에 저장되어있던 값들중 viewName값(save-resultemd)을 가져온다. MyView view = viewResolver(viewName); 이곳에서 전체적인 경로(/WEB-INF/views/ + viewName + .jsp)를 조합해서 리턴할 풀 경로를 만들어준다. view.render(mv.getModel(), request, response); 이 부분이 제일 이해가 안가는 부분입니다. 모델에 있는 값들을 꺼내서 request에 담아서 jsp쪽으로 보내주는 내용인데.. render를 할 때 mv.getModel() 이 값에 모델 정보들을 넘겨주는데 getModel이라는 정보가 위에서 controller.process(paramMap)의 컨트롤러에서 process메소드를 실행해서 넣어준 mv.getModel().put() 값을 말하는게 맞는거죠? 그렇게 만들어준 값들을 view 화면에 넘겨주기 위해서 render를 할 때 mv.getModel정보를 같이 render에 넘겨줘서 render에서는 해당 값들을 뽑아서 request값에 setAttribute로 key, value로 넣어줘야 jsp 파일에서 쉽게 사용을 할 수 있기 때문에 render에서 request에 담아서 화면단으로 넘겨주는게 맞는거죠?? 정리가 안되는 부분이 있어서 문의글을 적으면서 차근차근 글을 적다보니 대략적으로 이런식으로 흘러가는거구나.. 하고 감이 잡히는 것 같은데 제가 이해하고 있는 부분이 맞는건지, 아니면 놓치는 부분이 있는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
init은 누가 호출하는 건가요..?
@RequestMapping("/basic/items") 여기로 url이 들어오면, get으로 바로 @GetMappingpublic String items(Model model) { 이쪽으로 들어오고, return으로 html을 반환하지 않나요? 그런데 상품이 등록 되어 있던데.. @PostConstructpublic void init() { itemRepository.save(new Item("testA", 10000, 10)); itemRepository.save(new Item("testB", 20000, 20));} 이 init은 누가 호출하는 것인지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@Controller , @RequestMapping
안녕하십니까 영한님 ! 제가 잘 이해하고 있는지 , 아닌지에 대해 여쭙고자 질문을 남깁니다. @Controller를 통해 스프링 빈으로 해당 클레스가 등록이 되고 , @RequestMapping에 담긴 논리URL 통해 클라이언트가 전송한 URL과 매칭 여부를 판단해 ( getHandler() ) @Cotroller로 등록된 객체를 반환하여, 그에 맞는 어댑터를 통해 해당되는 Controller을 실행하는게 맞을까요?