묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 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전체가 다 지워지는 건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
사소한 오타를 발견하여 말씀드립니다!
강의 대시보드의 강의자료는 버전 수정이력이 v2021-12-01로 되어있지만 PDF파일 다운받을 시 v 2022-12-01로 오타가 있습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 생성 후 build.gradle Open as Project 시 에러
환경 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에서는 '전체 디스크 접근 권한'을 허용하고 진행하는 것인지, 혹시 환경의 문제가 있는건지 궁금합니다. 긴 질문사항 읽어주셔서 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만들지 않은 url로 접근 할 떄 처리는 어떻게 하나요 ??
만약에 /itemsed 라는 만들지도 않은 url로 접근할 경우는 어떻게 처리를 하나요 ?? 1) 로그인을 한 경우 잘못된 경로 인입 -> 에러창이 뜸 (아마도 다음 예외처리에서 해결??) 2) 로그인을 하지 않은 경우 잘못된 경로 인입 -> 로그인체크 인터셉터에서 로그인창으로 리다이렉트 -> 이 경로도 1)과 마찬가지고 에러페이지로 예외처리 하려면 addPaterns 에 /** 가 아니라 더 세밀하게 조정을 해야할까요? 아니면 다른 방법이 있을까요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실행을 두번 연달아서 했더니 NoClassDefFoundError가 떴습니다.
강의내용 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: default2022-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/WebServlet2022-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/WebServletat 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/WebServletat 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 omittedCaused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServletat 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로 들어가도 들어가지지 않는 상태입니다.. 제가 인텔리제이가 처음이여서 많이 어버버하네요 ㅜㅜ 어떻게 하면 될까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@Login Member ➡ @Login Optional〈Member〉 파라미터 타입에 대한 질문입니다.
[질문 템플릿]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 를 파라미터로 넘겨도 괜찮을지 궁금합니다.잠제적인 문제를 알수 없어 질문하게 되었습니다. 읽어주셔서 감사해요!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JdbcTemplate
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] build.gradle 파일에 jdbc 라이브러리를 추가하고, Load Gradle Changes도 해보고 File -> Open -> build.gradle을 선택해서 Open as Project도 해보았는데 JdbcTemplate을 import 못하고 있습니다. 어떤 부분에 문제가 있는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
requestheaderservlet 실행 에러
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, DB 접근 기술
aftereach 적용하지 않아도 테스트가 정상작동됩니다.
현재 복습중입니다. 12분 34초에 나오는데, 분명 예전에는 @AfterEach 를 넣지 않으면 repository에서 기존 값들이 지워지지 않아 테스트에 오류가 생겼었습니다. 그런데 지금은 @AfterEach에서 clear 해주지 않아도 알아서 다른 테스트들에서 저장한 값들이 저장되지 않는데, 기본 구조가 바뀐 걸까요? 예를 들면 findAll에서 repository에 멤버1, 멤버2를 저장했습니다. 그러면 레포지토리의 사이즈는 2가 되어야 하는데, 다음 테스트 맨 처음에 repository.size를 출력해주면 0이 나옵니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Java HotSpot(TM) 64-Bit Server VM warning
스프링부트 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 1편 - 백엔드 웹 개발 핵심 기술
서블릿 생성 시점과 역할 관련 질문입니다!
안녕하세요. 좋은 강의 정말 감사드립니다^^! 서블릿에 관련하여 궁금한 것이 생겨서 질문 드리고 싶습니다. 1. 서블릿 객체는 언제 생성되나요? 처음 스프링 부트가 띄워질 때 만들어 지는 것인가요? 아니면 url mapping이 되어서 서블릿 객체가 필요해지면 생성되나요? 그리고 스프링에서 사용하는 dispatcherservlet은 언제 생성되나요? 2. HttpServelet reqest 객체에 HTTP 요청 메시지 파싱해서 넣고 처리해주는게 서블릿 객체라고 배웠습니다. 그렇다면 HttpServelet response의 내용을 바탕으로 HTTP 응답 메시지를 생성하는 것도 서블릿이 하나요? 3. 서블릿의 요청 메시지 처리 작업은 언제 이루어지나요? was가 url에 맞는 서블릿 객체의 service()를 수행하는데, 저희가 만든 service에는 요청 메시지 파싱 작업이 없어보입니다! service를 부르기 전에 다른 메소드가 먼저 불리는 것인가요? 감사합니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
실무에 대해 궁금한것이 있습니다.
그렇다면 실무에서는 REST API의 예외처리를 처리하는경우, 앞서 배운 ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 이거는 제쳐두고 궁극기인 ExceptionHandlerExceptionResolver 의 @ExceptionHandler와 이를 모아서 관리하는 @ControllerAdvice 이렇게 2개만 사용이 되는편인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
리다이렉트 302
안녕하세요 크게 의미가 있는 질문은 아닌것 같지만 궁금해서 질문드립니다. 13:42초에 리다이렉트 후 hello-from.html을 200으로 응답코드를 내려줍니다. 그리고 HTTP 강의에서도 200으로 내려준다고 배웠던 기억이 있습니다. 그런데 왜 저는 똑같이 했는데 302로 내려주는 걸까요? 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
try catch구문 질문 있습니다
강사님께선 처음에는 try catch를 쓸까 말까 고민하시다가 나중에는 에러가 터져서 try catch를 쓰시는걸 보았는데요, 실무에서 try catch를 언제 써야하는지 기준같은게 있는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문이 있어요~
안녕하세요! Model에 데이터를 보관할 때 request.setAttribute를 사용하잖아요. 근데 model에 있는 데이터는 응답으로 나가야하는 데이터면 response가 아닐까라는 생각이 들었는데,, request에서 온 파라미터를 꺼내서 객체를 만들고 model에 그 데이터를 보관해서 뷰로 나가는 거니까 request인건가요? 감사합니다..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타입 오류 처리 시점에 대해 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용]여기에 질문 내용을 남겨주세요. 강사님 안녕하세요! 항상 좋은 수업 감사합니다. 28분 45초 부근에서 타입 오류 처리(필드 타입 Integer인데 사용자가 String으로 입력하는 경우) 스프링 MVC에서 컨트롤러에 진입하기 전에 터진다는 말씀을 듣고 궁금증이 생겨 질문드립니다! 스프링 MVC1 강의에서, ModelAttribute 사용시 요청 파라미터로부터 리소스 객체를 만들고 setXXXX함수가 자동으로 실행되어 필드값이 설정된다고 설명해주셨었습니다. 이 경우, RequestMapping을 통해 컨트롤러에는 진입하지만 setXXXX함수가 실행되는 과정에서 객체의 필드와 타입이 매칭되지 않아 예외를 발생시키는 것이라고 이해하면 될까요? 아니면 타입 오류를 처리하는 별도의 로직이 스프링에 내장되어 있을까요? 제가 이해한 실행 흐름대로면 타입 체크가 들어갈만한 부분이 setXXXX 메서드 말고는 없을것같은데, 또 스프링이 워낙 많은 기능을 제공하다보니 컨트롤러 진입 전에 뭔가 해줄것 같기도 하고 그렇네요 ...ㅎㅎㅎ
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
람다식 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 강의 항상 잘 듣고 있습니다. 또한 항상 수고스럽게 답변해주시는 서포터 분들에게 먼저 감사 말씀 드립니다. 람다식의 용법에 대해서 궁금한 점이 있습니다. private Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName))); return paramMap;} 위의 코드에서 paramName -> paramMap.put(paramName, request.getParameter(paramName))); 의 라인에서 paramName 이라는 매개변수를 어떻게 사용할 수 있는건가요? 람다식이 (파라미터) -> (로직) 의 형태((a,b) -> (a+b)로 사용하는 문법인 걸로 알고 있는데 위의 코드가 paramName이라는 매개변수를 받아서 paramMap에 paramName이라는 Key와 request.getParameter(paramName)이라는 Value를 넣는 것으로 이해했습니다. 그런데 paramName을 선언한 곳은 없는데 어떻게 사용할 수 있을까요? 자바 문법적인 강의는 영한 선생님께서 기본이라 안 해주시지만, 이미 기본서를 읽고 왔고 나름대로 검색을 해봤는데도 해답을 얻을 수가 없어서 질문을 남기게 되었습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요 localhost:8080/hello 부분 질문드립니다.
안녕하세요 localhost:8080/hello를 요청하는 부분에서 매핑페이지가 없다고 오류가 나옵니다. // hello 서블릿 클래스 입니다. //서버는 8080포트라고 잘 뜹니다. //스프링부트 메인 클래스 입니다. 스프링부트 메인페이지가 최상단에 위치해야 한다고 하여 main 클래스를 확인해보아도 hello.servlet 으로 위치해있고 , 위치를 hello로 바꾸어도 결과는 똑같았습니다. webapp에 만들어놓은 정적 페이지를 요청했을땐 잘 실행이 됩니다. 그 이후에 response 등등 여러 클래스를 만들었던 url로 요청을해도 모두 매핑페이지가 없다고 뜹니다. 감사합니다
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰 관련 파일을 webapp 폴더아래에 넣었을 스프링이 인식하는 과정
예전에 레거시로 스프링 프로젝트를 작성할때는 pom.xml에 폴더 경로를 써줬던 것 같은데 제가 못찾는 것이거나 부트를 사용해서 그런지 그런 설정을 찾아볼 수가 없네요. 혹시 webapp 폴더에 넣어야 한다는 설정을 어디서 찾아볼 수 있을까요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
model 객체를 쓰는이유가 뭔가요?
왜 model에 데이터를 보관해야하는건가요??