학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 BasicErrorController를 사용하면 뷰템플릿만 작성을 하여도 해당 에러에 맞는 뷰를 렌더링해준다는 것으로 이해했는데요, 에러페이지를 직접등록할때는 ErrorPage errorPageEx = new ErrorPage(RuntimeException.class, “/error-page/500”);처럼 런타임예외가 터졌을때 /error-page/500경로에 해당하는 핸들러메소드를 호출할 수 있었습니다. 만약 RuntimeException이 터졌을때 특정 뷰템플릿을 렌더링하고싶을때는 어떻게 해야할지 궁금합니다. BasicErrorController를 씀과 동시에 WebServerCustomizer에서 에러페이지를 등록해줘야 하는 것일까요? 그리고 저희가 ErrorPage를 등록할 떄 BasicErrorController를 알지 못한 상태였는데요, 이는 에러페이지를 직접 등록했을 때는 BasicErrorController에 의한 뷰템플릿호출이 후순위로 밀려 작동하지 않는다고 볼 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 제목 그대로 ItemRepository의 save는 저장소에 저장만 하는 메서드인데 void를 쓰지 않고 Item을 반환하는 이유가 따로 있을까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 인텔리제이 유료버전으로 설치해서 오라클을 연동해서 데이터베이스를 불러올수 있습니다 선생님이 설치하시는 h2 로 설치해서 수업을 따라가야 할지 오라클로 진행해도 무리 없을지 문의드립니다(스프링 기본편도 들을 예정입니다) 유료버전과 강의의 무료버전으로 진행하는게 다른점이 있을지도 문의드립니다 (유료버전 첫달 사용해보려는데 굳이 유료를 쓰는 이유가 어떤게 있을지도 알수 있을까요? 저는 우선 추천받아서 결제를 진행하였습니다!)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 인텔리제이 유료버전으로 설치해서 오라클을 연동해서 데이터베이스를 불러올수 있습니다 선생님이 설치하시는 h2 로 설치해서 수업을 따라가야 할지 오라클로 진행해도 무리 없을지 문의드립니다(스프링 기본편도 들을 예정입니다) 유료버전과 강의의 무료버전으로 진행하는게 다른점이 있을지도 문의드립니다 (유료버전 첫달 사용해보려는데 굳이 유료를 쓰는 이유가 어떤게 있을지도 알수 있을까요? 저는 우선 추천받아서 결제를 진행하였습니다!)
안녕하세요 트랜잭션 적용1 강의 10분 40초 정도에서 쿼리로 delete from member를 적었는데 Timeout trying to lock table "MEMBER"; SQL statement: delete from member [50200-224] HYT00/50200 (도움말) 이러한 오류가 떠서요 어떻게 하면 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] mvc 강의를 다 듣고 프로젝트를 진행중인데 계속 오류가 떠서 혹시 한번만 봐주실수있나요 ? ㅠㅠ https://drive.google.com/drive/folders/15tIzYE6utLhSHtXVeYGPBUeqcMUFxKJc?hl=ko http://localhost:8080/velog/signUp 스프링을 실행시키고 위의 url로 이동한 뒤, 값을 모두 입력하고 Sign Up 버튼을 누르면 처음 기본 화면인 http://localhost:8080/velog/login 으로 가야하는데 이동을 안하고 계속 에러가 뜨는 상황입니다 ㅠㅠ.. 혼자 해결해보려고 했는데 하루종일 잡고있어도 에러가 안풀리네요... 도와주시면 감사하겠습니다 어느부분에서 오류가 난걸까요 ?ㅠㅠㅠ 오류 내용 그대로 GPT한테 물어보니 GPT는 아래처럼 대답하긴 했습니다. 로그인멤버 객체를 저장하는 LoginMember를 로그인 처리하는 컨트롤러에서 사용하였는데요.. @GetMapping("/login") public String LoginService(Model model) { model.addAttribute("loginMember", new LoginMember()); return "home"; } 위의 코드가 문제인것같은데,,ㅠㅠ 뭐가 문제일까요 제발 살려주세요ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
강의 섹션6 스프링DB 접근 기술에서 순수 JDBC 강의 편을 듣고 따라하던중 spring실행해서 멤버를 등록한 후 갱신되는지를 확인하는 장면을 따라했습니다. 그런데 데이터베이스에 입력한 멤버가 삽입은 되는데 화면과 console 에서 에러가 나옵니다. jdbcMemberRepository로 변경전에는 모두 이상없이 실행되었습니다. 아래는 에러페이지 입니다. 이클립스로 실행했습니다. 아래는 console로그에서 에러부분 입니다. java.lang.NumberFormatException: Character A is neither a decimal digit number, decimal point, nor "e" notation exponential mark. threw exception [Request processing failed: java.lang.IllegalStateException: java.sql.SQLException: 부적합한 변환이 요청됨] with root cause java.lang.NumberFormatException: Character A is neither a decimal digit number, decimal point, nor "e" notation exponential mark. at java.base/java.math.BigDecimal.<init>(BigDecimal.java:586) ~[na:na] at java.base/java.math.BigDecimal.<init>(BigDecimal.java:471) ~[na:na] at java.base/java.math.BigDecimal.<init>(BigDecimal.java:900) ~[na:na] at oracle.jdbc.driver.T4CVarcharAccessor.StringToNUMBER(T4CVarcharAccessor.java:782) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CVarcharAccessor.getNUMBER(T4CVarcharAccessor.java:257) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CVarcharAccessor.getLong(T4CVarcharAccessor.java:555) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.GeneratedStatement.getLong(GeneratedStatement.java:208) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.GeneratedScrollableResultSet.getLong(GeneratedScrollableResultSet.java:261) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) ~[HikariCP-5.0.1.jar:na] at com.example.hello.repository.JdbcMemberRepository.save(JdbcMemberRepository.java:43) ~[main/:na] at com.example.hello.service.MemberService.join(MemberService.java:29) ~[main/:na] at com.example.hello.controller.MemberController.create(MemberController.java:34) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:259) ~[spring-web-6.1.4.jar:6.1.4] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:192) ~[spring-web-6.1.4.jar:6.1.4] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.4.jar:6.1.4] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:920) ~[spring-webmvc-6.1.4.jar:6.1.4] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:830) ~[spring-webmvc-6.1.4.jar:6.1.4] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.han~$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.19.jar:10.1.19] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.19.jar:10.1.19] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.19.jar:10.1.19] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.19.jar:10.1.19] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.19.jar:10.1.19] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.19.jar:10.1.19] at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] 제가 데이터베이스를 오라클로 설치했는데 오라클에서 테이블 생성 sql 은 이렇습니다. 데이터는 보면 id에 모두 숫자만 들어가 있습니다. create table member( id number generated by default as identity, name varchar2(255), primary key(id) ); 혹시나해서 설정파일도 올려봅니다 아래는 bundle.gradle 입니다. plugins { id 'java' id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.oracle.ojdbc:ojdbc8:19.3.0.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('bootBuildImage') { builder = 'paketobuildpacks/builder-jammy-base:latest' } tasks.named('test') { useJUnitPlatform() } 아래는 application.properies 입니다. server.port = 8090 spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp server.servlet.encoding.charset=UTF-8 server.servlet.encoding.enabled=true server.servlet.encoding.force=true spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.username=test_1 spring.datasource.password=admin123
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 백엔드 개발자가 타임리프를 공부하는 이유가 혼자서 뭘 만들어볼때 빠르게 웹페이지를 확인해보면서 개발하려고 하는 거고 실무에서는 보통 프론트엔트쪽에서 react같은걸로 서비스를 만드는거 맞아요? 백엔드개발자와 프론트엔드개발자의 역할에 대해 약간 헷갈려서 여쭤봅니다.
MyHandlerExceptionResolver 클레스를 등록하기 위해서 WebConfig 클래스에서 해당 메서드를 오버라이딩 해주었는데 그냥 MyHandlerExceptionResolver 에 @Component 애노테이션을 사용해서 스프링 빈으로 등록 시켜줘면 안되는건가요?
안녕하세요. BindingResult에 관해서 질문드리려고 합니다. <실전 자바 소프트웨어 개발> 라울-게이브리얼 우르마, 리처드 워버턴 책을 보던 중에 Notification 패턴이란 걸 알게 되었습니다. 이게 마틴 파울러가 정립한 개념이라고 하는데 BindingResult가 동작하는 방식과 똑같더라고요. 혹시 BindingResult가 Notification 패턴을 적용한 사례인가요? 제가 제 블로그에 이러한 가정에서 글을 썼는데요. 질문 답변에 따라 글을 지울지 말지 정해야 합니다. 헤헤 https://griotold.tistory.com/3
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @Controller public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process() { return new ModelAndView("new-form"); } } 이 예제에서 1. /springmvc/v1/members/new-form 요청이 들어오면 RequestMappingHandlerMapping이 @RequestMapping("/springmvc/v1/members/new-form")이 붙은 메서드를 가진 @Controller 클래스를 찾아서 DispatcherServlet한테 반환해주고 (여기서는 SpringMemberFormControllerV1 클래스가 반환) DsipatcherServlet에서 RequestMappingHandlerAdapter가 SpringMemberFormControllerV1 클래스의 process() 메서드를 실행하는 순서가 맞을까요? RequestMappingHandlerMapping은 @RequestMapping 애노테이션으로 요청 url에 맞는 핸들러를 찾는데 @RequestMapping이 메서드에 붙어 있으니까, 메서드를 실행시키려면 메서드를 가진 클래스가 필요해서 @Controller 클래스를 반환해주고 RequestMappingHandlerAdapter는 반환받은 클래스의 객체를 통해 요청 url에 맞는 @RequestMapping 메서드를 실행시킨다고 이해하면 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ============================ CONDITIONS EVALUATION REPORT ============================ Positive matches: ----------------- None Negative matches: ----------------- None Exclusions: ----------- None Unconditional classes: ---------------------- None IllegalStateException error가 발생합니다. https://drive.google.com/file/d/1Qk1diQlnWXRZlcdPBcbrTs_1Zctp2BdA/view?usp=sharing
안녕하세요. javax.transaction.Transactional annotation에 대해 추가 질문드립니다. @Transactional annotation은 총 2가지가 있습니다. Spring에서 제공: org.springframework.transaction.annotation.Transactional Java에서 제공: javax.transaction.Transactional 강의에서는 spring에서 제공하는 annotation을 사용으로 추천해주셨고, 대부분 org.springframework.transaction.annotation.Transactional으로 사용을 하더라구요. 직접 찾아본 바로는 두가지 모두 트랙잭션 자체에 대한 동작은 동일하지만, spring에서 제공하는 Transactional이 더 많은 부가 기능을 가지고 있어 사용을 권장한다고 하네요. 이렇게 이해하고 넘어가면 될까요?! 의견이 궁금해서 질문드립니다.
수업중에 보면.. Query String Parameters를 확인 할 수 있게 되어 있습니다. 그런데 저의 크롬에서는 저 란이 아무리 찾아봐도 없네요. request headers는 확인 가능하나... Query String Parameters 는 확인 인 불가합니다. 도와주세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이전 웹 서버, 웹 애플리케이션 서버 강의에서 클라이언트 -> Web Server -> WAS -> DB 이런 식으로 웹 시스템을 구성한다고 하셨는데 HttpServletRequest와 HttpServletResponse는 WAS 내의 WebServer에서 생성되는게 아니라 클라이언트의 http 요청을 가장 처음 받는 Web Server에서 생성해서 WAS의 WebServer로 넘겨주는건가요?
안녕하세요 강의 잘 듣고 있습니다. Javascript 에서는 외부 API 를 호출한 뒤, 그 결과를 기다리지 않고 다른 작업을 먼저 시작하거나 (비동기적으로), await 를 이용해서, (동기적으로 작동하기 위해) 작업이 끝날 때까지 기다리도록 설정을 합니다. 이런 비슷한 상황을 JAVA 는 어떻게 해결하는 지 궁금합니다. WebClient, CompletableFuture 를 이용해서 해결하는 게 맞는지. 더 나은 방식은 없는지. 나아가 이런 부분을 처리하는 방법에 대한 내용을 다룬 영한님의 강의가 있는지. 있다면 어느 부분에 있는지 여쭤보고 싶습니다... 감사합니다.
[질문 내용] 로그인 성공 시 HttpSession Session = request.getSession()를 호출해서 신규 세션을 생성하고 JsessionID로 사용자를 식별하는것으로이해했습니다. 여기서 궁금한것이 1. 세션 데이터는 공유 데이터로 서버 메모리 어딘가에 저장이 돼서 request.getSession() 으로 접근하는건가요? (a라는 사용자가 로그인컨트롤러를 호출하고 다른 컨트롤러에서 request.getsession을 하면 로그인 컨트롤러에서 반환하는 httpsession객체와 다른 컨틀롤러에서 반환하는 httpsession객체가 같은 것인지 다른것인지에 관한 메커니즘이 궁금합니다) 1번이 아니라면 컨트롤러에 접근할 때 session 객체가 계속 생성되는데 이걸 어떻게 저장하고 클라이언트를 구분하는지 메커니즘이 궁금합니다.