묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Whitelabel Error Page 라고 나옵니다.. 구글링해 보면서 찾아보았는데 어떻게 해결하죠?(해결)
2024-04-11 12:48:27.471 INFO 24733 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-04-11 12:48:27.471 INFO 24733 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2024-04-11 12:48:27.472 INFO 24733 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 msh2-console로 들어갔을때의 에러 코드이고이렇게 사이트 에러가 나오고#spring: # config: # activate: # on-profile: local # datasource: # url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER" # username : "jo" # password : "" # driver-class-name : org.h2.Driver #jpa: # hibernate: # ddl_auto : create # properties : # hibernate: # format_sql: true # show_sql : ture # dialect: org.hibernate.dialect.H2Dialect # #h2: # console: # enabled : true # path: /h2-console spring: config: activate: on-profile: local datasource: url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER" username: "sa" password: "" driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true show_sql: true dialect: org.hibernate.dialect.H2Dialect open-in-view: false h2: console: enabled: true path: /h2-console --- #spring: # datasource: ## //Spring boot가 어떠한 dababase를 가리키게 할 것인가 # url: "jdbc: mysql://localhost/library" ## jdbc -> java로 만든 DB-connector ## : mysql -> 종류는 mysql ## //localhost 사용할 주소 ## /사용할 DB # username: "root" # password : "1234" # driver-class-name: com.mysql.cj.jdbc.Driver ## DB에 접근할 때 사용할 프로그램을 의미 spring: config: active: on-profile: dev datasource: url: "jdbc:mysql://localhost/library" username: "root" password: "" driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: none properties: hibernate: show_sql: true format_sql: true dialect : org.hibernate.dialect.MySQL8Dialect open-in-view: false작성한 yml코드 입니다...2024-04-11 18:52:49.259 INFO 27511 --- [ main] c.g.libraryapp.LibraryAppApplication : Starting LibraryAppApplication using Java 18.0.2 on Jun0.local with PID 27511 (/Users/jojun-yeong/Desktop/강의 자료/1월25/Java_Spring_Library_Application/library-app/out/production/classes started by jojun-yeong in /Users/jojun-yeong/Desktop/강의 자료/1월25/Java_Spring_Library_Application/library-app) 2024-04-11 18:52:49.262 INFO 27511 --- [ main] c.g.libraryapp.LibraryAppApplication : The following 1 profile is active: "local" 2024-04-11 18:52:49.899 INFO 27511 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2024-04-11 18:52:49.959 INFO 27511 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51 ms. Found 3 JPA repository interfaces. 2024-04-11 18:52:50.529 INFO 27511 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2024-04-11 18:52:50.539 INFO 27511 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-04-11 18:52:50.540 INFO 27511 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.69] 2024-04-11 18:52:50.632 INFO 27511 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-04-11 18:52:50.632 INFO 27511 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1317 ms 2024-04-11 18:52:50.798 INFO 27511 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-04-11 18:52:51.112 INFO 27511 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2024-04-11 18:52:51.164 INFO 27511 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2024-04-11 18:52:51.233 INFO 27511 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.14.Final 2024-04-11 18:52:51.460 INFO 27511 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2024-04-11 18:52:51.577 INFO 27511 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect 2024-04-11 18:52:52.113 INFO 27511 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2024-04-11 18:52:52.121 INFO 27511 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2024-04-11 18:52:52.547 WARN 27511 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2024-04-11 18:52:52.793 INFO 27511 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2024-04-11 18:52:52.799 INFO 27511 --- [ main] c.g.libraryapp.LibraryAppApplication : Started LibraryAppApplication in 4.005 seconds (JVM running for 4.452)
-
해결됨스프링 핵심 원리 - 기본편
만약 Client A가 여러번 http request를 보낼경우
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ClientA가 요청을 보내는경우 처음 MyLogger 인스턴스 생성후 (uuid-1가정) 비즈니스 로직 처리한 후에 return을 한뒤,만약게 ClientA가 다시 요청을 보내면, MyLogger인스턴스가 새로 생성되어서 uuid-2이런식으로 동일한 ClientA임에도 불구하고 uuid가 변경되는것 아닌가요?
-
해결됨스프링 핵심 원리 - 기본편
Provider에서 에러가 납니다
강의 9분 쯤에서 jakarta.inject:jakarta.inject-api:2.0.1 ` 라이브러리를 gradle에 추가한다고 하는데추가하면오류가 나요구글 드라이브 첨부합니다https://drive.google.com/file/d/1Ace92-jSQRpEjtPMts_enWCT98bkbZ_4/view?usp=sharing
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
command+n 시 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]command + n을 했을때 강사님 처럼 class,interface를 지정할 수 있는 항목이 안뜹니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실무에서 http에 텍스트를 보내고 받는 경우가 있나요?
바디에 JSON 데이터를 담아서 통신는게 대부분인것 같은데 실무에서 텍스트를 주고 받는 경우가 있나요? 그리고 수업 내용이 점진적으로 버전이 증가하면서 이해를 도와주시는데 최종버전이 실무에서 가장 많이 사용되고 지향하는 방법이라 최종 버전만 이해하여도 큰 문제는 없나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바스크립트 주석과 HTML 주석의 차이?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 자바스크립트 인라인 사용 전 --> <script> var username = [[${user.username}]]; var age = [[${user.age}]]; //자바스크립트 내추럴 템플릿 var username2 = /*[[${user.username}]]*/ "test username"; //객체 var user = [[${user}]]; </script>이 코드에서 '자바스크립트 내추럴 템플릿' 부분에 있는 주석에 대해 궁금한 점이 있습니다. 서버를 실행한 후 페이지 소스 보기를 누르면주석 사이에 [[${user.username}]]가 아닌 userA가 보입니다. 그런데 이전의 주석 강의에선똑같이 서버 실행 후 페이지 소스 보기를 눌렀는데 ${data} 그대로인 채로 있습니다. 그래서 이번 강의에서도 주석 사이에 [[${user.username}]]로 되어 있을 줄 알았는데 userA로 변환이 되어 있더라고요. 강의에서 말씀해 주셨던 내용들 참고하면 "자바스크립트 코드는 서버에서 동작하지 않고, HTML 코드는 서버에서도 동작하며, 마찬가지로 자바스크립트 주석도 서버에선 동작하지 않고 HTML 주석은 서버에서도 동작한다." 이렇게 생각되긴 하는데 이 내용 때문이 맞는지, 그리고 이 내용에 오류가 없이 정확한지 확신이 안 들어서 질문드립니다.
-
미해결스프링 핵심 원리 - 기본편
싱글톤 컨테이너
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 질문이 있어서 글을 남김니다!싱글톤 패턴의 문제점에서private 생성자로 자식 클래스를 만들기 어렵다라는 문제점이 있는데싱글톤 컨테이너는 싱글톤 패턴의 문제점들을 다 보완해준다고 말씀해주셨는데 어떻게 보완을 하는지 원리가 궁금해서 글을 남김니다.항상 좋은 강의해주셔서 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
mysql centos7서버 연결문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 선생님^^ 강의 잘보고 있습니다. 항상 수고하십니다.h2 DB 말고 mysql centos7서버로 연결하려고 합니다. 서버에 연결까지하고 테이블까지는 생겼는데 데이터를 입력하고 저장을 누르면ava.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '=' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.29.jar:8.0.29] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.29.jar:8.0.29] at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) ~[mysql-connector-java-8.0.29.jar:8.0.29] at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:972) ~[mysql-connector-java-8.0.29.jar:8.0.29] at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-3.4.5.jar:na] at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.5.jar:na] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.getResultSet(Loader.java:2304) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2057) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2019) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.doQuery(Loader.java:948) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.doList(Loader.java:2850) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.doList(Loader.java:2832) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2664) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.Loader.list(Loader.java:2659) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1414) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1625) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1593) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at org.hibernate.query.Query.getResultList(Query.java:165) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] at jpabook.jpashop.repository.MemberRepository.findByName(MemberRepository.java:32) ~[main/:na] 이러한 에러가 발생합니다. 뭐가 문제 일까요 ㅜㅜㅜ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
한번만 질문 봐주십쇼..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 검증 부분을 수강하고 프로젝트에 적용하는데 잘 모르겠는 부분이 생겨서 질문드립니다@PostMapping("/blog/post") public String addOrUpdate(@ModelAttribute RequestPost requestPost, BindingResult bindingResult, Model model){ requestPostValidation.validate(requestPost,bindingResult); if(bindingResult.hasErrors()){ System.out.println(bindingResult); model.addAttribute("post",requestPost); return "addOrUpdate"; } if(requestPost.getId()==null){ postService.savePost(requestPost.toPost()); return "redirect:/blog"; } else{ postService.updatePost(requestPost); ResponsePost post = new ResponsePost(postService.findById(requestPost.getId())); model.addAttribute("post",post); return "redirect:/blog/post/"+post.getId(); } }이게 컨트롤러부분이고 @Component public class RequestPostValidation implements Validator { @Override public boolean supports(Class<?> clazz) { return RequestPost.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { RequestPost requestPost = (RequestPost)target; if(!StringUtils.hasText(requestPost.getTitle())){ errors.rejectValue("title","noTitle"); } if(!StringUtils.hasText(requestPost.getContent())){ errors.rejectValue("content","noContent"); } } }이게 검증하는 클래스입니다noTitle.requestPost.title=제목은 필수입니다. noContent.requestPost.content=내용은 필수입니다.에러 메시지는 이렇게 만들어 줬구요<form action="/blog/post" method="POST" th:object="${post}"> <input type="text" th:value="${post.id}" name="id" style="visibility: hidden;"> <h3>제목</h3> <input th:if="${post.id==null}" type="text" placeholder="제목 입력하시오" th:value="${post.title}" name="title"> <input th:if="${post.id!=null}" type="text" th:value="${post.title}" name="title"> <div th:errors="*{title}"> 제목 오류 </div> <h3>내용</h3> <textarea th:if="${post.id==null}" placeholder="내용 입력하시오" th:text="${post.content}" name="content"></textarea> <textarea th:if="${post.id!=null}" th:text="${post.content}" name="content"></textarea> <div th:errors="*{content}"> 내용 오류 </div> <br> <div class="center"> <input th:if="${post.id==null}" type="submit" value="등록"> <input th:if="${post.id!=null}" type="submit" value="수정"> <input th:if="${post.id==null}" type="button" th:onclick="|location.href='@{/blog}'|" value="취소"> <input th:if="${post.id!=null}" type="button" th:onclick="|location.href='@{/blog/post/{id}(id=${post.id})}'|" value="취소"> </div> </form> 이게 뷰 부분입니다1.컨트롤러에서 @ModelAttribute RequestPost requestPost 를 통해서 form 정보를 받는데 @ModelAttribute니까 Model에 requestPost 객체가 저장된다고 알고 있습니다 2.그런데 뷰 에서 form이 th:object="${post}"로 되어있어서 model.addAttribute("post",requestPost)로 post이름으로 requestPost 객체를 넣었습니다 3.그럼 제 생각에는 Model에 post이름으로 requestPost 객체가 있으니까 th:object="${post}" 매핑되어서 th:errors="*{title}" 를 통해 title필드가 문제가 있으면 오류메시지가 출력될거라 생각했는데 안됩니다. 4.여러가지를 시도를 해봤는데 model.addAttribute("post",requestPost) 를 하지 않고 @ModelAttribute("post")RequestPost requestPost 를 하고 메시지를 noTitle.post.title=제목은 필수입니다. 로 바꾸니까 그제서야 출력이 되더라고요 5.이게 BindingResult랑 Model에 저장된 객체의 이름이 달라서 이런 일이 발생하는 건가요? 제 생각으로는 model.addAttribute("post",requestPost) 하면 Model에 이름이 post로 저장이 되서 th:object="${post}"랑 매핑은 되는데 th:errors="*{title}"이거는 post 이름으로 BindingResult에서 객체이름을 찾는데 제가 올린코드에서는 requestPost로 저장되어 있어서 못찾는 건가요? 질문을 깔끔하게 하려고 여러번 지웠다 썻다 하는데도 난잡해서 죄송합니다. 제일 궁금한건 컨트롤러에서 @ModelAttribute RequestPost requestPost,BindingResult bindingResult 이렇게 인자를 받고 model.addAttribute("post",requestPost) 해서 뷰로 넘겼을때 th:object="${post}"를 하면 post이름으로 객체를 찾아서 requestPost랑 매핑은 되는데 th:errors="*{title}"를 통해서 오류를 검사할때는 BindingResult에서 post이름으로 객체를 찾아서 오류 출력하는데 현재 BindingResult에는 requestPost로 객체이름이 저장되어 있으니까 출력하지 못하는 걸까요? 한번만 봐주시면 감사하겠습니다..
-
미해결실전! 스프링 데이터 JPA
JPA join 관련 질문
안녕하세요 JPA 학습중 join 관련하여 질문 드립니다. public class Score{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long scoreId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "game_id") private Game game; }Score라는 클래스가 있고, Game 엔티티와 ManyToOne 연관관계가 있을 때 public interface ScoreRepository extends JpaRepository<Score,Long>{ @Query("select s from Score s join s.game g left join s.member m left join m.profileImg p " + "where g.gameId=:gameId and (p.type = 'PROFILE' OR p IS NULL) order by s.totalScore desc") Slice<Score> findByGameId(@Param("gameId") Long gameId, Pageable pageable); } Game별 Score를 가져올 경우 해당 게임에 등록된 스코어가 없는 경우 결과가 반환되지 않아서 Game 엔티티의 게임명이나 게임타입 같은 게임정보를 가져올수가 없습니다. right join을 사용해보려 했는데 리턴값이 Slice<Score>라서 그런지 형변환 오류가 발생하는 것 같구요..이럴경우에는 Game 엔티티에서 @OneToMany 연관관계를 사용해서 결과를 가져와야하나요?? 그럴 경우 페이징은 어떻게 해결해야하는지 잘모르겠습니다..
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
안녕하세요. spring boot 에서 하는중인데 질문 드립니다.!
spring boot 로 프로젝트 만들고 하는중이라서 부트에서 테스트 하고 있는데요. 구글링 해서 테스트 세팅하고 modelAndView 까지 했는데 view 값은 가져오는데 model 값이 안가져와지네요.... @MockBean 으로 Service 를 bean 등록 시키고 Service 에서 getList 할때 뭔가 잘안되는거 같은데 혹시 어떤게 잘못됬는지 확인 가능하신가요 ?? ControllerService testController testConstroller test 결과
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Mvc구조에서 뷰를 반환하지 않고 json을 반환하려면 어디서 구조 변경이 일어나나요?
스프링 Mvc구조를 설명해주실때 4번 핸들러 호출 이후 5번 ModelAndView를 반환한다고 되어 있는데 모델과 뷰애서 모델은 ssr에서 사용할 데이터들이 담겨 있는 모델에서 데이터를 꺼내어서 타임리프나 jsp 에서 사용할 수 있도록 데이터가 담긴 박스를 반환해주는 것이고 뷰는(타임리프를 사용한다고 할 때) 어떤 html에 모델을 넘겨줄것인지 결정해주는 부분으로 이해하였습니다. 이 방법은 앱 클라이언트처럼 json형식으로 데이터를 반환해야 하는 클라이언트를 이용할 때는 사용하지 못하는 방법으로 이해가 되는데 (json데이터를 요구하는 클라이언트에게는 뷰를 반환하여도 의미가 없는 데이터 이기 때문에) 어디서 구조를 변경해야 json 데이터를 반환해 줄 수 있는건가요?
-
해결됨스프링 부트 - 핵심 원리와 활용
index.html이 mapping되지 않습니다.
test는 mapping이 잘 되고 servlet들도 잘 실행되는 걸 보니 서버엔 문제가 없는 것 같은데 index.html만 localhost:8080 실행이 안 되네요..ㅠㅠ 해당 파일만 mapping에 실패하는 것 같은데 무엇이 문제인지 궁금합니다. 코드는 원래 server-start 프로젝트를 server로 바꿔서 쓰다가 계속 오류가 나서 server-start 말고 server 프로젝트를 import해서 dispatcherV3까지 들어있는 거고, 그렇게 하기 전까진 index.html과 /test, /hello-servlet 등 전부 실행이 안 되다가 그렇게 하고 나니 index.html 제외 나머지는 정상적으로 됩니다.https://drive.google.com/file/d/1V-s1hADVVwrVjNmo8UfKF8J2kdDfE08Z/view?usp=sharinghttps://drive.google.com/file/d/1ZrILPHymcmeXEIq3ZEsx2iVb_DmXCkr8/view?usp=sharing
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Lock 해제 시점이 궁금합니다.
안녕하세요!Lock을 해제하는 시점이 궁금합니다.아래 단계에서 어느 시점 이전 혹은 이후 인지 알려주시면 감사드리겠습니다. 1) 트랜잭션 시작2) Lock 획득 후 비즈니스 로직 실행3) 트랜잭션 커밋 (혹시, 3번 이전에 Lock을 해제할 경우 이전과 동일한 동시성 문제가 발생할 것 같은데.. 우선 답변부탁드립니다!)
-
미해결스프링 핵심 원리 - 기본편
컨테이너에 등록된 빈 조회 시 import 오류가 발생합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://drive.google.com/file/d/1gYS9IE_QZsnszjgmiBCS5jwuC-zjiEIh/view?usp=sharing 교안 그대로 스프링 빈 조회를 해봤는데 import junit 부분에서 오류가 발생 하고 있습니다. 어떡해야 할까요 ? 또한 프로젝트 실행 시 로그가 제대로 작동하지 않습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
처음 설치시 버전
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]동영상은 2점대에 설치인거같은데 현재는 아래처럼 나옵니다. 어느기준에 맞춰야 하나요?임시로 아래 사진처럼 내리긴 했는데 JpashopApplication 동작화살표 버튼이 없어서요
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
쿠키의 path에 대해 질문드립니다.
package com.myproject.jpaboard.web.controller; import com.myproject.jpaboard.domain.Member; import com.myproject.jpaboard.web.form.LoginForm; import com.myproject.jpaboard.web.repository.MemberRepository; import com.myproject.jpaboard.web.service.LoginService; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller @RequestMapping("/login") @RequiredArgsConstructor @Slf4j public class LoginController { private final LoginService loginService; private final MemberRepository memberRepository; @GetMapping("/login") public String showLogin(Model model) { model.addAttribute("loginForm", new LoginForm()); return "login"; } @PostMapping("/login") public String processLogin(@Validated @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) { if (!loginService.loginCheck(form.getEmail(), form.getPassword(), bindingResult)) { log.info("errors={}", bindingResult); return "login"; } // loginCheck에 통과하면 Member 반환 Member loginMember = loginService.findByLoginEmail(form.getEmail(), bindingResult);// findByEmail했을 떄 Member 하나만 나와야한다. // 로그인 성공 처리 TODO Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(idCookie); System.out.println("login success"); return "redirect:/"; } } 개인적으로 컨트롤러를 만들어서 테스트를 해보고 있는데 쿠키의 path가 루트가 아닌 '/login'으로 등록되어있더라구요. 그래서 url이 루트에 해당하는 HomeController에서 @CookieValue로 위에서 만든 쿠키를 받으려고 해도 받아지질 않습니다. 의도치 않게 쿠키의 path가 생기는 이유에 대해 알고싶습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
no matching variant 오류가 해결되지 않습니다.
아래 링크에서 지시한데로 https://www.inflearn.com/questions/1232895/no-matching-variant-%EC%98%A4%EB%A5%98 6번까지 다 수행했는데 아래와 같은 메세지가 뜹니다. 지원되지 않는 Gradle JVM.빌드가 현재 Java 17.0.10와(과) Gradle 6.8.2을(를) 사용하도록 구성되었습니다.가능한 솔루션:- Java 15을 Gradle JVM으로 사용: Gradle 설정 열기- Gradle 8.5(으)로 업그레이드하고 다시 동기화- Gradle 7.2(으)로 업그레이드하고 다시 동기화] "Gradle 8.5(으)로 업그레이드하고 다시 동기화하"를 클릭하니까 아래와 같은 메세지가 뜨고, 어노테이션도 인식 못하네요???Cannot use connection to Gradle distribution 'https://services.gradle.org/distributions/gradle-8.5-bin.zip' as it has been stopped.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류메시지 우선순위
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]오류코드가 구체적=>덜구체적 순으로 우선순위를 가진다는 것은 이해가 됐습니다.근데 만약 전체적으로 required(필수값 입니다.)로 메시지를 설정하고 싶고, 상품관련 화면에서만 required.item.itemName(상품 이름은 필수값입니다.)를 설정하고 싶다고 할 때필수값 입니다. 로 나타내고 싶은 화면도 모두 상품 이름은 필수값입니다. 라고 나타날 텐데 이런 경우에는 어떻게 사용하나요?아에 다른 에러코드명으로 생성 후 소스 수정해야하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 세션 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 로그인을 하면 세션 생성후 session.setAttribute해서 멤버정보를 넣어둘텐데그러면 타임리프에서 유저의 정보를 모델에서가 아닌 세션에서 꺼내는건 혹시 어떻게 생각하시나요?html두개로 로그인한쪽의 html에서 th:text="${member.name}" 이 아닌th:if="{session.loginMember} != null" th:text="${session.loginMember?.userId}" 이렇게 구현하면은 html 파일 하나로도 구현할수있을거같아 강사님의 생각은 어떠하신지 여쭈어보고싶습니다! 또 한가지는 로그인을 한 상태에서 로그인url (/login)로 이동되는건 컨트롤러에서 막아야할지 혹은 인터셉터로 막아야할지 고민이라 이것에 대해서도 여쭙고싶습니다 ㅜㅜ