묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
필터에 관련된 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 필터도 서블릿처럼 동작하는걸로 알고있고, 다만 디스페처서블릿전에 먼저 동작하는것으로 알고있습니다. 또 필터또한 서블릿컨테이너에서 관리되는것으로 알고있습니다. 서블릿이기때문이라고 생각합니다. 그런데 필터를사용하기위해서 webconfig에서 @Bean으로 스프링컨테이너에 필터를 등록해주는 작업을하는데요. 왜 두개의 컨테이너에 등록하는건가요? 중간에 잠시설명하신것중에 부트가 was를 내장하고있기때문에 @bean으로 스프링컨터네이너에 올라간다면 자동으로 서블릿컨테이너에도 필터가 등록되기때문인가요? 어떤 오개념이 있는지 알고싶습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
정적컨텐츠 관련 질문이요!
@Controllerpublic class HelloController { @GetMapping("hello-static") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; }} 위와 같이 컨트롤러를 만들었습니다. 따라서, localhost:8080/hello-static 을 입력하면template/hello.html로 이동되게 설정했습니다. 하지만, localhost:8080/hello-static.html을 입력하면 template/hello.html로 이동되지 않고 static/hello-static.html로 이동이 됩니다. 강의 내용에 따르면 localhost:8080/hello-static.html을 입력했을 때 hello-static 관련 컨트롤러가 없는 경우에 static/hello-static.html로 이동된다고 하신것으로 기억합니다. 그런데 hello-static 컨트롤러가 있는데도 왜 static으로 가게 되는지 궁금합니다!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MVC 실습관련 질문입니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]MVC 강의 내용에서 return 한 내용을 보고 templates에서 return한 내용과 동일한 이름을 갖고 있는 html을 찾아 변환된 내용을 웹 브라우저에 뿌려준다고 했습니다 웹 브라우저에서 요청이 들어오면 내장 톰켓서버가 요청을 스프링 컨테이너에 알리고 컨테이너는 맨 처음 컨트롤러에 해당 내용이 있는지 찾는다고 하셨는데 이때 컨트롤러에 있는 경우에는 return 받은 내용을 무조건 templates에서만 찾는건가요? (궁금해서 static 하위로 옮겨서 수행을 해보니까 오류가 나는걸 보고 컨트롤러에 있으면 -> templates를 확인, 컨트롤러에 없으면 -> static에서 확인 이렇게 이해를 했습니다) 이거관련해서 정확하게 알고 싶어 질문 남깁니다 감사합니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Cause: invalid source release: 11
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Cause: invalid source release: 11 에러가 뜨는데 어떻게 해야하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
쿠키와 토큰의 차이가 무엇인가요?
쿠키와 토큰의 차이가 무엇인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam Map<String, Object> paramMap
안녕하세요, 14:43초 쯤 @RequestParam Map<String, Object> paramMap에서 String 대신 Object를 사용한 이유가 있을까요?? 감사합니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
패키지 구조 설계
패키지 구조 설계를 강의로 다루는 부분이 있을까요? 아직 제대로된 프로젝을 만든적이 없어서 패키지 구조 설계를 어떻게 해야할지 잘 모르는 상태입니다. 뭔가 알듯하면서도 잘 모르는게 개념이 확실히 안잡혀서 그런것같은데 혹시 패키지 구조 설계를 다루는 강의가 있을까요? 현재는 Spirng 로드맵대로 강의 보고있는중인데 jpa 강의쪽에서 패키지 구조 설계를 다루는지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
logout에 대해서
강의에서 보면 @PostMapping("/logout")public String logout(HttpServletResponse response) { expireCookie(response, "memberId"); return "redirect:/";} private void expireCookie(HttpServletResponse response, String cookieName) { Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie);} 강의 코드가 위와 같은데요. 궁금한게 왜 굳이 POST 메서드로 컨트롤러 매핑을 했는지 궁금합니다 세션 쿠키는 어차피 요청시 값이 전달이 되어 GET으로 매핑해도 될것같은데 POST로 매핑한 이유가 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4섹션 5번째 영상에서 @BeforEach로 감싸주는 이유가 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 이렇게 작성해도 테스트 정상적으로 실행되는데 어떤 이유가 있어서 BeforeEach에서 매번 new로 객체를 만들어주신건지 궁금합니다!
-
해결됨[React 1부] 만들고 비교하며 학습하는 React
강의 설명란 오타 수정
git checkout -f ready/tab-view-2 가 아니라 git checkout -f ready/tab-2로 변경되어야 할 거 같습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
리다이렉트 대신에 th:onclick 사용
@PostMapping("/add")public String addItemV3(Item item){ //자동적용 itemRepository.save(item); return "basic/item";} 리다이렉트를 꼭 서야하나 싶어, 주석부분처럼 th이용해 주소를 이동하면 편할거같아 시도했습니다. 상품등록 클릭 시, org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "item.id" (template: "basic/addForm" - line 38, col 17) 오류가 떴습니다. @Modelattribute에의해서 item.id 사용할 수 있을거라 생각했는데 오류원인을 모르겠습니다 ㅜㅜ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
국제화 테스트 과정에서 글자깨짐
-
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
내부 클래스에 대해서 질문있습니다
안녕하세요 강의듣다가 궁금한 점이 생겼습니다 @Component("helloBean") static class HelloBean { .... } 이 부분인데요 BasicController는 스프링이 자동으로 컴포넌트 스캔을 해주면서 빈등록이 되는데 컨트롤러가 빈등록이 되면서 @Component 애노테이션을 써준 내부 클래스도 자동으로 빈등록이 되지않나요? 그러면 당연히 타임리프에서 사용할 수 있는데 왜 강의에서 static 키워드를 넣어준건지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 정보 채우는 방식?
안녕하세요, 이전에 V3, V4 등에서 핸들러 정보를 Map에 직접 저장했었습니다. 그러면 스프링 MVC 구조에서 핸들러 정보가 어떻게 채워지게 되나요?? 감사합니다. --- 질문이 애매한 것 같아서 추가합니다. ( ~ 4:49) /springmvc/v1/members/new-form HTTP 요청을 받은 후 어떻게 SpringMemberFormControllerV1 핸들러(컨트롤러)를 찾아올 수 있는지 정확하게 모르겠습니다. 그냥 클래스 레벨에 @Controller가 붙어있는 모든 클래스를 찾아서 그 안에 @RequestMapping으로 요청 받은 url과 동일한게 있다면 그 때 SpringMemberFormControllerV1 컨트롤러를 getHandelr()에서 반환하는 것인가요? 갑자기 애노테이션 기반 컨트롤러를 사용해서 이전 내용과 이어지질 않는 기분입니다.ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
mvc관련 질문입니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] 다음과 같이 안되네요 ㅜㅜ 도와주세요 여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 업로드와 관련되어 궁금한 부분이 있습니다 .
안녕하세요 영한님! 항상 강의를 열심히 시청하고 있는 취준생입니다! 상품 테이블이 있고 상품 이미지(상품이미지 파일의 경로) 테이블이 존재할 때 상품 수정 시 파일을 어떻게 수정하도록 작성해야 하는지 궁금한 점이 생겼습니다. 기존에 1 2 3 4 라는 파일의 이름으로 이미지가 저장되어 있고 수정 시 3 4 5 6 의 파일이 새로 요청될 때 3 4 번을 제외하고 1,2는 삭제 / 5 6 은 새로 갱신해주는 로직을 작성하는게 맞는 방법일지, 1 2 3 4를 한번에 다 삭제 후 새롭게 3 4 5 6 파일을 업로드 해주는게 깔끔한 방법일지 궁금증이 생겼습니다. 어떤게 더 좋은 방법일까요? 혹시 둘다 잘못된 방법이라면 어떻게 처리하는게 좋은 방법일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@PathVariable 사용 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]안녕하세요! PathVariable을 사용하다 궁금한 점이 생겨 질문 남깁니다. 변수명과 원하는 name 설정이 같으면 생략할 수 있다고 하셨는데 이를 테스트 코드로 작성 시 오류가 발생합니다. (포스트맨으로 실행 시 성공..) Controller @ResponseBody @GetMapping("/test/{id}") public void test(@PathVariable Long id) { ... } Test Code @Test public void 테스트_코드() throws Exception { Long id = 1L; mvc.perform(get("/test/" + id)) .andExpect(status().isOk()); } Error org.springframework.web.util.NestedServletException: Request processing failed; java.lang.IllegalArgumentException: Name for argument type [java.lang.Long] not available, and parameter name information not found in class file either. 제가 조사한 바로는 아래와 같은데 (Spring 공식 문서 일부) The matching of method parameter names to URI Template variable names can only be done if your code is compiled with debugging enabled. If you do have not debugging enabled, you must specify the name of the URI Template variable name to bind to in the @PathVariable annotation. debugging enabled한 compile이라는걸 이해할 수 없어 질문 납겨봅니다ㅠ.ㅠ 답변 남겨주시면 감사합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody인 경우의 실행흐름이 궁금합니다.
안녕하세요. 항상 좋은 강의 감사합니다. 다름이 아니라 제가 정확히 이해가 안 가는 부분이 있어서 질문드립니다. @responseBody 애노테이션이 붙은 컨트롤러의 메서드는 다음과 같이 실행된다고 이해했습니다. Controller가 Http 메시지 바디에 쓸 내용 return -> ReturnValueHandler 의 구현체 중 RequestResponseBodyMethodProcessor 호출되어 HttpMessageConverter을 이용함. 위 과정과 관련해 강사님께서 @ResponseBody와 같이 view rendering이 필요 없는 작업들은 view가 생성되는 뒷 단의 작업들은(ViewResolver 와 View) 이루어지지 않는다고 설명해 주셨습니다. 그런데 여기서 의문점이 스프링 mvc의 DispatcherServlet 코드를 보면 mv = ha.handler(processedRequest, response, mappedHandler.getHandler()); 부분이 있습니다. 즉 어댑터를 통해 핸들러를 호출하면 항상 반환값으로 ModelAndView를 받습니다. 그럼 여기서 제가 궁금한 점이 생겼습니다. 클라이언트의 요청이 컨트롤러에서 @ResponseBody가 적힌 메서드가 호출되는 요청이라면 HttpMessageConverter에서 메시지 변환 과정을 진행 한 후 실제 Http 응답 메시지가 만들어서 클라이언트한테 전송되는 건가요?(이 경우는 실행흐름이 DispatcherServlet으로 가지 않고 종료) 아니면 HttpMessageConverter가 response 객체에 해당 값을 넣어두고, 흐름이 다시 DispatcherServlet으로 가서(그럼 여거서 mv는 null이 들어가나요?) 내부 로직에 의해 view를 만드는 과정이 생략되고 http 응답 메시지가 만들어지는 건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC에서 핸들러 매핑
[질문 내용]안녕하세요 스프링mvc 학습 중 궁금한 점이 생겨 질문 올립니다. 스프링 mvc에서 디스패처 서블릿이 핸들러 매핑할때 @Controller @RequestMapping 이 붙어있는 "클래스"를 찾아서 핸들러로 매핑 한다고 이해 했습니다. 그렇다면 어댑터는 해당 핸들러의 @RequestMapping("[url경로]") 애노테이션이 붙어있는 "메소드"를 실행 시켜주는것인가요?? @RequestMapping 애노테이션이 붙어있는 "메소드"를 컨트롤러라고 부르는건가요..? 만약 클래스 레벨에 @RequestMapping("[url경로]")가 있고 해당 클래스의 메서드가(애노테이션이 붙지않은 순수 자바 메서드) 단 하나뿐이라면 요청이 왔을때에 클래스의 메서드가 실행 되는것일까요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
V2 HandlerAdapter 적용하기
안녕하세요. 수업을 듣다가 V2 또한 Adapter 로 만들어 보려고 하였습니다. 김영한님이 V2 를 적용하려면 아마 FrontController 도 건드려야 할 거라고 하셨는데, ControllerV2HandlerAdapter도 MyHandlerAdapter 인터페이스를 구현하니 어떻게든 ModelView 를 리턴하게 만들 수밖에 없더라고요. (잠깐 디폴트 메소드 써볼까 했는데…어차피 추상메소드는 구현해야하니까 그것도 안되더라고요 ㅜㅜ) 그래서 차라리 ControllerV2HandlerAdapter로 ModelView 를 구현하게 만들었는데, public class ControllerV2HandlerAdapter implements MyHandlerAdapter { @Override public boolean supports(Object handler) { return (handler instanceof ControllerV2); } @Override public ModelView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException { ControllerV2 controller = (ControllerV2) handler; MyView view = controller.process(request, response); String viewPath = view.getViewPath(); // 모델뷰 만들기 String viewName = parsingViewName(viewPath); ModelView mv = new ModelView(viewName); // 모델뷰에 모델 넣기 Map<String, Object> model = new HashMap<>(); request.getAttributeNames().asIterator() .forEachRemaining(attributeName -> model.put(attributeName, request.getAttribute(attributeName))); mv.setModel(model); return mv; } private String parsingViewName(String viewPath) { String[] splitList = viewPath.split("/"); int lastIndex = splitList.length - 1; String viewNameWithJSP = splitList[lastIndex]; String[] splitJSP = viewNameWithJSP.split("[.]"); String viewName = splitJSP[0]; return viewName;} 작동은 잘 되는데, 저 parsingViewName 메소드로 너무 억지로 ModelView로 반환하려는 느낌이 들어서… 조금 아쉽습니다. FrontController 에서 쉽게 바꿀 수 있는 아이디어가 있을까요? 아직 저는 구현 Adapter들이 MyHandlerAdapter 를 구현하는 것 때문에 FrontController 에서는 어떻게 바꿔야할지 모르겠습니다. 또 한편으로 Adapter의 역할이 말 그대로 110V 이나 50V 뭐든 220V 으로 맞춰주는 거라고 생각한다면, ControllerV2HandlerAdapter 에서 억지로라도 ModelView 로 반환해주는 것이 맞는 것 같다는 생각도 듭니다. 그래서, 만약 FrontController 와 구현 Adapter 중 하나를 수정해야한다면 무엇을 수정하는 것이 더 효율적인가요?(유지보수면에서요!)