inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

내부 클래스에 대해서 질문있습니다

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요 강의듣다가 궁금한 점이 생겼습니다 @Component("helloBean") static class HelloBean { .... } 이 부분인데요 BasicController는 스프링이 자동으로 컴포넌트 스캔을 해주면서 빈등록이 되는데 컨트롤러가 빈등록이 되면서 @Component 애노테이션을 써준 내부 클래스도 자동으로 빈등록이 되지않나요? 그러면 당연히 타임리프에서 사용할 수 있는데 왜 강의에서 static 키워드를 넣어준건지 궁금합니다.

  • MVC
  • spring
조윤호 댓글 1 좋아요 1 조회수 601

핸들러 정보 채우는 방식?

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요, 이전에 V3, V4 등에서 핸들러 정보를 Map에 직접 저장했었습니다. 그러면 스프링 MVC 구조에서 핸들러 정보가 어떻게 채워지게 되나요?? 감사합니다. --- 질문이 애매한 것 같아서 추가합니다. ( ~ 4:49) /springmvc/v1/members/new-form HTTP 요청을 받은 후 어떻게 SpringMemberFormControllerV1 핸들러(컨트롤러)를 찾아올 수 있는지 정확하게 모르겠습니다. 그냥 클래스 레벨에 @Controller가 붙어있는 모든 클래스를 찾아서 그 안에 @RequestMapping으로 요청 받은 url과 동일한게 있다면 그 때 SpringMemberFormControllerV1 컨트롤러를 getHandelr()에서 반환하는 것인가요? 갑자기 애노테이션 기반 컨트롤러를 사용해서 이전 내용과 이어지질 않는 기분입니다.ㅠㅠ

  • MVC
  • spring
lch9502 댓글 1 좋아요 5 조회수 405

mvc관련 질문입니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] 다음과 같이 안되네요 ㅜㅜ 도와주세요 여기에 질문 내용을 남겨주세요.

  • mvc
  • spring-boot
  • java
  • spring
  • MVC
박소영 댓글 1 좋아요 0 조회수 176

파일 업로드와 관련되어 궁금한 부분이 있습니다 .

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요 영한님! 항상 강의를 열심히 시청하고 있는 취준생입니다! 상품 테이블이 있고 상품 이미지(상품이미지 파일의 경로) 테이블이 존재할 때 상품 수정 시 파일을 어떻게 수정하도록 작성해야 하는지 궁금한 점이 생겼습니다. 기존에 1 2 3 4 라는 파일의 이름으로 이미지가 저장되어 있고 수정 시 3 4 5 6 의 파일이 새로 요청될 때 3 4 번을 제외하고 1,2는 삭제 / 5 6 은 새로 갱신해주는 로직을 작성하는게 맞는 방법일지, 1 2 3 4를 한번에 다 삭제 후 새롭게 3 4 5 6 파일을 업로드 해주는게 깔끔한 방법일지 궁금증이 생겼습니다. 어떤게 더 좋은 방법일까요? 혹시 둘다 잘못된 방법이라면 어떻게 처리하는게 좋은 방법일까요?

  • spring
  • MVC
댓글 2 좋아요 0 조회수 335

@PathVariable 사용 질문

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 템플릿] 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이라는걸 이해할 수 없어 질문 납겨봅니다ㅠ.ㅠ 답변 남겨주시면 감사합니다.

  • pathvariable
  • spring
  • MVC
댓글 1 좋아요 0 조회수 893

@ResponseBody인 경우의 실행흐름이 궁금합니다.

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요. 항상 좋은 강의 감사합니다. 다름이 아니라 제가 정확히 이해가 안 가는 부분이 있어서 질문드립니다. @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 응답 메시지가 만들어지는 건가요?

  • spring
  • MVC
방은혁 댓글 1 좋아요 9 조회수 623

스프링 MVC에서 핸들러 매핑

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 내용] 안녕하세요 스프링mvc 학습 중 궁금한 점이 생겨 질문 올립니다. 스프링 mvc에서 디스패처 서블릿이 핸들러 매핑할때 @Controller @RequestMapping 이 붙어있는 "클래스"를 찾아서 핸들러로 매핑 한다고 이해 했습니다. 그렇다면 어댑터는 해당 핸들러의 @RequestMapping("[url경로]") 애노테이션이 붙어있는 "메소드"를 실행 시켜주는것인가요?? @RequestMapping 애노테이션이 붙어있는 "메소드"를 컨트롤러라고 부르는건가요..? 만약 클래스 레벨에 @RequestMapping("[url경로]")가 있고 해당 클래스의 메서드가(애노테이션이 붙지않은 순수 자바 메서드) 단 하나뿐이라면 요청이 왔을때에 클래스의 메서드가 실행 되는것일까요??

  • 스프링
  • mvc
  • MVC
  • spring
ch.jooon 댓글 1 좋아요 1 조회수 302

V2 HandlerAdapter 적용하기

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요. 수업을 듣다가 V2 또한 Adapter 로 만들어 보려고 하였습니다. 김영한님이 V2 를 적용하려면 아마 FrontController 도 건드려야 할 거라고 하셨는데, ControllerV2HandlerAdapter도 MyHandlerAdapter 인터페이스를 구현하니 어떻게든 ModelView 를 리턴하게 만들 수밖에 없더라고요. (잠깐 디폴트 메소드 써볼까 했는데&hellip;어차피 추상메소드는 구현해야하니까 그것도 안되더라고요 ㅜㅜ) 그래서 차라리 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로 반환하려는 느낌이 들어서&hellip; 조금 아쉽습니다. FrontController 에서 쉽게 바꿀 수 있는 아이디어가 있을까요? 아직 저는 구현 Adapter들이 MyHandlerAdapter 를 구현하는 것 때문에 FrontController 에서는 어떻게 바꿔야할지 모르겠습니다. 또 한편으로 Adapter의 역할이 말 그대로 110V 이나 50V 뭐든 220V 으로 맞춰주는 거라고 생각한다면, ControllerV2HandlerAdapter 에서 억지로라도 ModelView 로 반환해주는 것이 맞는 것 같다는 생각도 듭니다. 그래서, 만약 FrontController 와 구현 Adapter 중 하나를 수정해야한다면 무엇을 수정하는 것이 더 효율적인가요?(유지보수면에서요!)

  • spring
  • MVC
‍이신광 댓글 1 좋아요 1 조회수 295

세션 관련 질문이 있습니다.

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

기존에 직접 sessionManager를 만들어서 세션을 관리하는 것에 있어서는 sessionStore라는 맵에 key값으로 sessionId와 value값으로는 loginMember를 넣어서 사용을 하고 sessionId를 가지고 사용자를 식별하여 사용한 것으로 이해했습니다. 맞나요? 그런데 session.setAttribute함수를 찾아보니 attributes라는 map에 key값으로 상수값을 value값으로 loginMember를 넣는 거 같은데 (attributes.put(name, value)이렇게 있더라고요) 그럼 map에 키값이 동일하게 지정을 해주면 다른 사용자에 대해서는 어떻게 식별을 하나요? 관리자모드로 보면 sessionId가 생기긴 하는데 이건 spring에서 생성을 해주는 것이 아닌가요? 제가 못찾은 것인지 어느 코드가 id를 생성하는지를 모르겠어어요... 아 그리고 logout에서는 v2를 보면 expire를 통해서 해당 id값에 대한 member를 지우도록 했는데 session을 사용하면서 invalidate함수를 통해 session을 지우면 session전체가 다 지워지는 건가요?

  • spring
  • MVC
JHS 댓글 3 좋아요 1 조회수 364

사소한 오타를 발견하여 말씀드립니다!

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

강의 대시보드의 강의자료는 버전 수정이력이 v2021-12-01로 되어있지만 PDF파일 다운받을 시 v 2022-12-01로 오타가 있습니다.

  • spring-boot
  • spring
  • MVC
  • java
reyeol 댓글 1 좋아요 0 조회수 213

프로젝트 생성 후 build.gradle Open as Project 시 에러

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

환경 OS : Mac M1 Pro macOS Monterey Version 12.1 Intellij : Intellij IDEA 2021.3.1(Ultimate Edition) Build #IU-213.6461.79, built on December 29, 2021 Java Version : openjdk version "11.0.11" 2021-04-20 오류 메시지 Could not load wrapper properties from '{프로젝트 경로}/{프로젝트 명}/gradle/wrapper/gradle-wrapper.properties'. 현상 start.spring.io에서 [프로젝트 환경설정] - [프로젝트 생성] 후 Intellij에서 Open을 통해 프로젝트의 build.gradle Open - 오픈 -> 오픈시 Open as Project를 클릭 Window 10에서는 별다른 설정 없이 Gradle에서 라이브러리를 정상적으로 다운 하였으나, Mac에서는 Build 에러 발생(오류 메시지 참조) 해결을 위한 진행 사항 1. 'Could not load wrapper properties from Intellij' 키워드로 검색결과 gradle 버전 문제로 확인되었으나, 해당 프로젝트로 Window 10환경에서 정상적으로 gradle Build되어 해당 케이스 제외 2. Intellij에서 제공하는 New Project를 사용하여 Gradle 프로젝트 Build가 성공 ※ 정상적으로 build를 성공 하였으나, 원인 확인을 위한 분석 진행 분석 사항 1. start.spring.io에서 생성한 프로젝트(이하 spring)와 Intellij에서 생성한 프로젝트(이하 Intellij)의 gradle-wrapper.properties 비교 spring의 distributionUrl : https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip Intellij의 distributionUrl : https\://services.gradle.org/distributions/gradle-7.1-bin.zip 두 설정의 gradle 버전은 각 7.3.3-bin.zip과 7.1-bin.zip으로 버전차이가 있음 Case 1. Intellij 프로젝트의 설정파일을 spring 프로젝트의 설정파일로 덮어씌웠으나 동일한 에러 발생 Case 2. spring 프로젝트의 설정파일을 Intellij 프로젝트의 설정파일로 덮어씌웠으나 정상 결과 : 설정파일 또는 버전의 문제가 아님. 2. 구글링 중 Intellij와 Gradle sync에러 관련 글 확인결과 블로거가 Intellij의 log를 확인 한것을 따라 Intellij의 로그 체크결과 권한 관련 사항이 문제 에러로그 : java.nio.file.FileSystemException: '{프로젝트 경로}/{프로젝트 명}/gradle/wrapper: Operation not permitted' [결론 및 해결 방안] 권한의 문제로 시스템 환경설정 - 보안 및 개인 정보 보호 - 전체 디스크 접근 권한 - Intellij IDEA.app 권한 부여 [질문사항] 1. 권한 허용을 하지 않아도 Intellij에서 생성된 프로젝트는 Build성공한 이유가 궁금합니다. 2. 추가로 Mac에서는 '전체 디스크 접근 권한'을 허용하고 진행하는 것인지, 혹시 환경의 문제가 있는건지 궁금합니다. 긴 질문사항 읽어주셔서 감사합니다 .

  • java
  • spring
  • MVC
  • spring-boot
reyeol 댓글 2 좋아요 0 조회수 1728

만들지 않은 url로 접근 할 떄 처리는 어떻게 하나요 ??

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

만약에 /itemsed 라는 만들지도 않은 url로 접근할 경우는 어떻게 처리를 하나요 ?? 1) 로그인을 한 경우 잘못된 경로 인입 -> 에러창이 뜸 (아마도 다음 예외처리에서 해결??) 2) 로그인을 하지 않은 경우 잘못된 경로 인입 -> 로그인체크 인터셉터에서 로그인창으로 리다이렉트 -> 이 경로도 1)과 마찬가지고 에러페이지로 예외처리 하려면 addPaterns 에 /** 가 아니라 더 세밀하게 조정을 해야할까요? 아니면 다른 방법이 있을까요 ?

  • MVC
  • spring
김연규 댓글 1 좋아요 0 조회수 395

실행을 두번 연달아서 했더니 NoClassDefFoundError가 떴습니다.

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

강의내용 6:00까지 진행중이였는데 제가 실수로 Run을 두번 해버렸습니다. 그림에 빨간동그라미 표시한대로 처음은 Run탭에 초록색 화살표를 눌렀다가 두번째로 Run을 진행했더니 NoClassDefFoundError 에러가 떴습니다. 런했을 때 나오는 콘솔내용들입니다. 2022-01-22 10:52:31.818 INFO 12244 --- [ main] hello.servlet.ServletApplication : No active profile set, falling back to default profiles: default 2022-01-22 10:52:32.817 WARN 12244 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet 2022-01-22 10:52:32.834 INFO 12244 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-01-22 10:52:32.878 ERROR 12244 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:196) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:414) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.6.3.jar:2.6.3] at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na] Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:49) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.15.jar:5.3.15] ... 13 common frames omitted Caused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServlet at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] ... 20 common frames omitted Process finished with exit code 1 이러고 localhost로 들어가도 들어가지지 않는 상태입니다.. 제가 인텔리제이가 처음이여서 많이 어버버하네요 ㅜㅜ 어떻게 하면 될까요?

  • spring
  • mvc
장호정 댓글 1 좋아요 0 조회수 412

@Login Member ➡ @Login Optional〈Member〉 파라미터 타입에 대한 질문입니다.

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 최고의 김영한 강사님. 감탄하며 듣고 보고 있습니다. 고맙습니다. 새해 복많이 받으셔요! 저의 상황은 이렇습니다. HomeController 코드입니다. @GetMapping ( "/" ) public String loginHomeV4ArgumentResolver ( @Login ( LOGIN_MEMBER ) Optional < Member > member , Model model ) { if ( member . isEmpty ()) { return "home" ; } model . addAttribute ( "member" , member . get ()) ; return "loginHome" ; } 이 코드에서 의구심이 드는 부분은 제가 커스텀 한 파라미터 부분입니다. Optional<Member> @Login ( LOGIN_MEMBER ) Optional < Member > member 아규먼트 리졸버에서 HomeController 로 요렇게 쏴주고 있어요 public Object resolveArgument (... ) { ... ... /* 어노테이션 value 얻어오기 */ String sessionId = loginAnnotation . value () ; return Optional . ofNullable ( session . getAttribute ( sessionId )) ; } 질문입니다. 메서드 파라미터로 Optional 을 쓰지 말라고 어디선가 들었는데, 그 룰이 이 상황에도 적용이 되는지 , 이렇게 Optional 를 파라미터로 넘겨도 괜찮을지 궁금합니다. 잠제적인 문제를 알수 없어 질문하게 되었습니다. 읽어주셔서 감사해요!

  • spring
  • MVC
Truestar 댓글 1 좋아요 0 조회수 528

JdbcTemplate

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] build.gradle 파일에 jdbc 라이브러리를 추가하고, Load Gradle Changes도 해보고 File -> Open -> build.gradle을 선택해서 Open as Project도 해보았는데 JdbcTemplate을 import 못하고 있습니다. 어떤 부분에 문제가 있는 건가요?

  • MVC
  • spring-boot
  • spring
  • java
yuuuuu 댓글 1 좋아요 0 조회수 528

requestheaderservlet 실행 에러

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

3분경 코드 실행시 다음과같이 파싱은 제대로 되나, 밑에 에러들( IOExeption .. )이 많이 뜹니다 . 에러 내용이고, 최하단 코드업로드도했습니다. --- REQUEST-LINE - start --- request.getMethod() = GET request.getProtocal() = HTTP/1.1 request.getScheme() = http request.getRequestURL() = http://localhost:8080/request-header request.getRequestURI() = /request-header request.getQueryString() = null request.isSecure() = false --- REQUEST-LINE - end --- 2022-01-21 15:13:09.393 DEBUG 27180 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [780] 2022-01-21 15:13:09.393 DEBUG 27180 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Received [] 2022-01-21 15:13:09.394 DEBUG 27180 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@d344380:org.apache.tomcat.util.net.NioChannel@91bedf8:java.nio.channels.SocketChannel[connected local=/[0:0:0:0:0:0:0:1]:8080 remote=/[0:0:0:0:0:0:0:1]:51431]], Status in: [OPEN_READ], State out: [OPEN] 2022-01-21 15:13:11.105 DEBUG 27180 --- [nio-8080-exec-2] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [780] 2022-01-21 15:13:11.105 DEBUG 27180 --- [nio-8080-exec-3] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [0] 2022-01-21 15:13:11.113 DEBUG 27180 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1328) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1215) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:269) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na] 2022-01-21 15:13:11.113 DEBUG 27180 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1328) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1215) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:269) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na] 2022-01-21 15:13:11.114 DEBUG 27180 --- [nio-8080-exec-3] 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:1328) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1215) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:269) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na] 2022-01-21 15:13:11.114 DEBUG 27180 --- [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:1328) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1215) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:269) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na] 2022-01-21 15:13:11.115 DEBUG 27180 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@d344380:org.apache.tomcat.util.net.NioChannel@91bedf8:java.nio.channels.SocketChannel[connected local=/[0:0:0:0:0:0:0:1]:8080 remote=/[0:0:0:0:0:0:0:1]:51431]], Status in: [OPEN_READ], State out: [CLOSED] 2022-01-21 15:13:11.115 DEBUG 27180 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@744cb7a8:org.apache.tomcat.util.net.NioChannel@639e0620:java.nio.channels.SocketChannel[connected local=/[0:0:0:0:0:0:0:1]:8080 remote=/[0:0:0:0:0:0:0:1]:51430]], Status in: [OPEN_READ], State out: [CLOSED] --- package hello.servlet.basic.request ; import javax.servlet.ServletException ; import javax.servlet.annotation. WebServlet ; import javax.servlet.http.HttpServlet ; import javax.servlet.http.HttpServletRequest ; import javax.servlet.http.HttpServletResponse ; import java.io.IOException ; @WebServlet (name = "requestHeaderServlet" , urlPatterns = "/request-header" ) public class RequestHeaderServlet extends HttpServlet { @Override protected void service (HttpServletRequest request , HttpServletResponse response) throws ServletException , IOException { printStartLine(request) ; } private void printStartLine (HttpServletRequest request) { System. out .println( "--- REQUEST-LINE - start ---" ) ; System. out .println( "request.getMethod() = " + request.getMethod()) ; //GET System. out .println( "request.getProtocal() = " + request.getProtocol()) ; //HTTP/1.1 System. out .println( "request.getScheme() = " + request.getScheme()) ; //http // http://localhost:8080/request-header System. out .println( "request.getRequestURL() = " + request.getRequestURL()) ; // /request-test System. out .println( "request.getRequestURI() = " + request.getRequestURI()) ; //username=hi System. out .println( "request.getQueryString() = " + request.getQueryString()) ; System. out .println( "request.isSecure() = " + request.isSecure()) ; //https 사용 유무 System. out .println( "--- REQUEST-LINE - end ---" ) ; System. out .println() ; } }

  • MVC
  • spring
댓글 1 좋아요 1 조회수 2542

aftereach 적용하지 않아도 테스트가 정상작동됩니다.

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

현재 복습중입니다. 12분 34초에 나오는데, 분명 예전에는 @AfterEach 를 넣지 않으면 repository에서 기존 값들이 지워지지 않아 테스트에 오류가 생겼었습니다. 그런데 지금은 @AfterEach에서 clear 해주지 않아도 알아서 다른 테스트들에서 저장한 값들이 저장되지 않는데, 기본 구조가 바뀐 걸까요? 예를 들면 findAll에서 repository에 멤버1, 멤버2를 저장했습니다. 그러면 레포지토리의 사이즈는 2가 되어야 하는데, 다음 테스트 맨 처음에 repository.size를 출력해주면 0이 나옵니다.

  • MVC
  • spring-boot
  • spring
  • java
김태훈 댓글 2 좋아요 0 조회수 464

Java HotSpot(TM) 64-Bit Server VM warning

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링부트 gradle 2.6.2 버전인데 설치하고 나서 기본 세팅된 프로그램 돌려봤는데 다음과 같은 워닝이 떠요 Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. 어떻게 해결할 수 있을까요?

  • MVC
  • spring
  • spring-boot
  • java
이석현 댓글 2 좋아요 0 조회수 2806

서블릿 생성 시점과 역할 관련 질문입니다!

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요. 좋은 강의 정말 감사드립니다^^! 서블릿에 관련하여 궁금한 것이 생겨서 질문 드리고 싶습니다. 1. 서블릿 객체는 언제 생성되나요? 처음 스프링 부트가 띄워질 때 만들어 지는 것인가요? 아니면 url mapping이 되어서 서블릿 객체가 필요해지면 생성되나요? 그리고 스프링에서 사용하는 dispatcherservlet은 언제 생성되나요? 2. HttpServelet reqest 객체에 HTTP 요청 메시지 파싱해서 넣고 처리해주는게 서블릿 객체라고 배웠습니다. 그렇다면 HttpServelet response의 내용을 바탕으로 HTTP 응답 메시지를 생성하는 것도 서블릿이 하나요? 3. 서블릿의 요청 메시지 처리 작업은 언제 이루어지나요? was가 url에 맞는 서블릿 객체의 service()를 수행하는데, 저희가 만든 service에는 요청 메시지 파싱 작업이 없어보입니다! service를 부르기 전에 다른 메소드가 먼저 불리는 것인가요? 감사합니다!

  • spring
  • MVC
asdf5184 댓글 2 좋아요 5 조회수 2191

인기 태그

인프런 TOP Writers

주간 인기글