묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
db 네트워크모드 접속 이유
최초 db 실행시에 파일모드로 실행해서 db파일을 만드는 것까지는 이해가 되었습니다. 하지만 이후부터는 tcp를 이용해서 네트워크 모드로 접속한다고 되어있는데 그 이유를 찾아보니 여러 어플리케이션이 동시에 해당 db를 사용하는 경우에는 db를 파일모드로는 사용하지 못하고 네트워크 모드로만 가능하다는 내용을 찾게 되었습니다. 이러한 이유가 맞는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
패키지 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의를 듣다가 패키지관련으로 궁금증이 생겨 질문을 남기게 되었습니다.현재 강의에서는 편의성을 위해 회원이나 상품 이런 여러 도메인을 각각 domain, repositoy 등 한 패키지에 몰아서 하고 있는 것으로 보입니다. 그렇다면 제가 따로 category를 추가해서 개발을 해보거나 더 형태가 복잡한 개발을 할 때는 패키지 구성을 어떻게 하는 것이 효율적인가요?(jpabook.jpashop 바로 아래 패키지 기준)주제별로 하위 패키지ex) 상품(패키지) - domain(패키지) - 상품, 주문 (클래스) - repository(패키지) - 상품repo(클래스)기능별로 하위패키지ex) domain(패키지) - member(패키지) - 멤버(클래스) domain(패키지) - 상품(패키지) - 상품(클래스)
-
해결됨실전! 스프링 데이터 JPA
14분에서 limit이 아닌 fetch로 sql이 나가는데
영상에서는 findTop3by에 대한 쿼리메서드의 sql이 limit으로 나가는데 실습해보니 first ? rows only로 나가는걸 확인했습니다. 찾아보니 동일한 기능을 하지만 데이터베이스 호환성으로 first? rows only가 날려지는것으로 이해했는데. 이 부분 맞을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
페치 조인1 - 기본 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setTeam(teamB); em.persist(member3); String query = "select t from Team t join fetch t.members"; List<Team> result = em.createQuery(query, Team.class) .getResultList();위의 코드를 실행했을 때 강사님의 결과값은 3개가 나왔는데 저는 2개가 결과로 나왔습니다. 시간이 지나서 JPQL이 중복을 제거하게 바뀐 걸까요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
spring webflux 와 spring data jpa Transaction 사용 시 문제
토이프로젝트를 하다 어쩌다 보니 spring webflux를 사용하게 되고 spring data jpa 는 reactive 환경에서 사용하지 못한다는 것을 모른 채 개발하다가...@SpringBootTest 에서 @Transactional 을 쓴 테스트에서 롤백이 되지 않는 현상을 발견했습니다.. TRACE 로 설정해 두고 실행시켜본 결과...```2024-01-11T00:54:00.058+09:00 INFO 18764 --- [ Test worker] c.s.o.s.StockMarketDataServiceTest : Started StockMarketDataServiceTest in 10.371 seconds (process running for 11.483)2024-01-11T00:54:00.124+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.stock.oppenheimer.service.StockMarketDataServiceTest.testAddByStockName]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:00.125+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(2129901484<open>)] for JPA transaction2024-01-11T00:54:00.132+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@7b5f886d]2024-01-11T00:54:00.606+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(2129901484<open>)] for JPA transaction2024-01-11T00:54:00.606+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Participating in existing transaction2024-01-11T00:54:00.606+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Getting transaction for [com.stock.oppenheimer.service.StockMarketFacadeService.addStockMarketData]2024-01-11T00:54:00.607+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(2129901484<open>)] for JPA transaction2024-01-11T00:54:00.607+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Participating in existing transaction2024-01-11T00:54:00.607+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Getting transaction for [com.stock.oppenheimer.service.StockDataService.addStockData]2024-01-11T00:54:00.628+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Completing transaction for [com.stock.oppenheimer.service.StockDataService.addStockData]2024-01-11T00:54:00.629+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Completing transaction for [com.stock.oppenheimer.service.StockMarketFacadeService.addStockMarketData]2024-01-11T00:54:02.705+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:02.706+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(576234319<open>)] for JPA transaction2024-01-11T00:54:02.706+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@183cb66b]2024-01-11T00:54:02.706+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:02.749+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:02.749+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit2024-01-11T00:54:02.749+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(576234319<open>)]2024-01-11T00:54:02.758+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Closing JPA EntityManager [SessionImpl(576234319<open>)] after transaction2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.stock.oppenheimer.service.MarketDataService.fetchMarketData]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(222446599<open>)] for JPA transaction2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@7a4f5e33]2024-01-11T00:54:02.759+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Getting transaction for [com.stock.oppenheimer.service.MarketDataService.fetchMarketData]2024-01-11T00:54:02.760+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Completing transaction for [com.stock.oppenheimer.service.MarketDataService.fetchMarketData]2024-01-11T00:54:02.761+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit2024-01-11T00:54:02.761+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(222446599<open>)]2024-01-11T00:54:02.761+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Closing JPA EntityManager [SessionImpl(222446599<open>)] after transaction2024-01-11T00:54:03.536+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:03.537+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(1744980953<open>)] for JPA transaction2024-01-11T00:54:03.537+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@364f6c3d]2024-01-11T00:54:03.537+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:03.546+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:03.546+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit```이러한 상황을 경험하게 되었습니다.2024-01-11T00:54:02.706+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(576234319<open>)] for JPA transaction2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(222446599<open>)] for JPA transaction2024-01-11T00:54:03.537+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(1744980953<open>)] for JPA transaction기존에 쓰이던 엔티티매니저가 없어지고 계속 새로운 엔티티 매니저가 오픈이 되고 있었습니다. 2024-01-11T02:01:18.229+09:00 DEBUG 25524 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Rolling back JPA transaction on EntityManager [SessionImpl(1495319789<open>)]하지만 마지막에 롤백 되는 엔티티메니저는 [Test worker thread] 에서 소환한 엔티티매니저 단 하나였습니다. 해당 부분을 소환하는 코드는 이렇습니다.. @Transactional public Flux<MarketData> saveMarketData(MktDataDTO marketDataDTO, StockData savedStockData) { MarketData marketData = conversionService.convert(marketDataDTO, MarketData.class); marketData.setStockData(savedStockData); marketDataRepository.save(marketData); return Flux.just(marketData); } 골이 당겨 오네요 ㅜㅜㅜ..r2dbc 로 마이그레이션을 하지 않고 transaction 설정을 잘 이용해서 이 상황을 해결할 방법이 있을지 한번 여쭤봅니다.코드 전문은 kimseunghyun-kr/oppenheimer at VolumeProfile (github.com)여기 있습니다..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.clear() , em.close()
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Team team = new Team();team.setName("TeamA");em.persist(team); em.flush();em.clear(); 1차 캐시 비우기em.close(); 영속성 컨텍스트 종료로 알고 있는데 System.out.println(" =============== ");System.out.println("team = " + team.getId());System.out.println(" =============== ");이 team.getId() 값이 null이 아니라 해당 id 값이 출력될 수 있는 이유가 persist 할떄 team id 필드에 초기화 되서 인건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 내역 존재 시 에러발생
안녕하세요주문 내역이 없을 시 화면이 출력 되는데요값이 1개라도 존재할 경우 오류가 발생합니다.ChatGTP 돌려본 결과"Unable to access property 'name' through getter method" 와 같이 item.member.name 에 getter을 이용하여 접근할 수 없다는 내용의 에러가 나옵니다.또, Lazy로딩에 관한 문제로 member.name에 접근할 수 없다는 에러도 보이길래 fetch조인 사용해도 문제가 발생합니다 pdf에 존재하는 findAllByString() 메소드를 그대로 덮어쓰고orderList.html까지 그대로 사용해도 문제가 발생합니다.아래는 /orders 접속 시 발생한 에러입니다r Error, status=500).An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077) at org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372) at org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1431) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1167) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "item.member.name" (template: "order/orderList" - line 42, col 21) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 48 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "item.member.name" (template: "order/orderList" - line 42, col 21) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292) at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205) at org.thymeleaf.engine.Model.process(Model.java:282) at org.thymeleaf.engine.Model.process(Model.java:290) at org.thymeleaf.engine.IteratedGatheringModelProcessable.processIterationModel(IteratedGatheringModelProcessable.java:368) at org.thymeleaf.engine.IteratedGatheringModelProcessable.process(IteratedGatheringModelProcessable.java:222) at org.thymeleaf.engine.ProcessorTemplateHandler.handleCloseElement(ProcessorTemplateHandler.java:1640) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleCloseElementEnd(TemplateHandlerAdapterMarkupHandler.java:388) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleCloseElementEnd(InlinedOutputExpressionMarkupHandler.java:322) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleCloseElementEnd(OutputExpressionInlinePreProcessorHandler.java:220) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleCloseElementEnd(InlinedOutputExpressionMarkupHandler.java:164) at org.attoparser.HtmlElement.handleCloseElementEnd(HtmlElement.java:169) at org.attoparser.HtmlMarkupHandler.handleCloseElementEnd(HtmlMarkupHandler.java:412) at org.attoparser.MarkupEventProcessorHandler.handleCloseElementEnd(MarkupEventProcessorHandler.java:473) at org.attoparser.ParsingElementMarkupUtil.parseCloseElement(ParsingElementMarkupUtil.java:201) at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:725) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... 50 more Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1021E: A problem occurred whilst attempting to access the property 'name': 'Unable to access property 'name' through getter method' at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:220) at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:111) at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:416) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:98) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:114) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:338) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ... 75 more Caused by: org.springframework.expression.AccessException: Unable to access property 'name' through getter method at org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.read(ReflectivePropertyAccessor.java:698) at org.springframework.expression.spel.ast.PropertyOrFieldRefe
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
UI 화면과 프로젝트 연결
안녕하세요. 선생님께서 제공해주신 UI 화면을 저희 프로젝트 서버에 연결하는 방법이 궁금합니다. 프론트엔드에서 버튼을 클릭했을 때 API와 연결되어 동작하는 과정이 궁금합니다!
-
미해결실전! 스프링 데이터 JPA
2024년 1월 기준 p6spy dependency 추가
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' 1.9.0으로 바꾸시면 나올겁니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 내역 전체 조회
@GetMapping("/orders") public String orderList(@ModelAttribute("orderSearch") OrderSearch orderSearch, Model model) { List<Order> orders = orderService.findOrders(orderSearch); model.addAttribute("orders", orders); return "order/orderList"; }여기 로직에서 검색조건 없이 홈 화면에서주문 내역 버튼 눌러서 들어갔을 때 어떻게 모든 주문 내역이 출력되는거죠?코드에는 orderSearch로 검색조건 받아서 검색, 출력하는 코드밖에 없는데 이해가 안가네요 ㅜㅜ 같은 메소드에서 모두 조회, 검색조건에 따른 조회가 같이 일어나는것인가요
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
ReWritePath필터의 세그먼트 식은 정규식일까요??
안녕하세요 선생님!강의를 잘 듣던 와중에 궁금증이 생겨 질문 드립니다. 게이트 웨이에 설정한 필터 중,요청 uri를 재정의 하기 위해서 RewritePath 라는 필터를 사용하잖아요. 이때 /user-service/(?<segment>.*), /$\{segment}는 정규식인가요??... 정규식표현에 segment라는 것이 찾아봐도 나오지 않아서요!!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
CATEGORY_ITEM 클래스를 직접 생성하면 다대일 관계가 될까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의와 자료 내용대로 수업을 듣고 라이브 코딩으로 강사님과 똑같은 구동상황을 확인했습니다.그러다 한 가지 궁금증이 생겨서 질문을 남깁니다.지금 상황에서는 @ManyToMany 어노테이션을 사용해서Category 클래스와 Item 클래스가 다대다 관계를 가져,자동으로 category_item테이블이 생성되는 것으로 보입니다.그렇다면 강사님이 주신 자료에서 회원 테이블 분석표대로CategoryItem클래스를 생성하여 @OnetoMany @ManyToOne 관계로 전환한다면 일대다 다대일 관계가 성립하면서추가로 다른 컬럼을 추가한다거나 하는 게 가능할까요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
강의노트 내용
수업자료 파트에서 강의노트 파일을 받았는데 비어 있는 파일이라고 나옵니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Intellij IDEA가 아니라 Gradle을 사용하면 에러가 나와요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 여기서 Build and run using과 Run tests using을 Intellij IDEA로 설정하면 아무런 에러가 나오지 않고 잘 작동이 되는데, Gradle을 사용하게 되면 에러가 납니다. 이런 에러가 나옵니다. Project Structure의 SDK는 17로 해두었고,스프링부트 버전은 3.2.1, java는 17입니다. 현재 Gradle 버전은 8.5입니다. 제공해주신 피피티에서는 스프링 부트 3.2부터 JDK 17과 꼭 Gradle을 선택하라고 하셔서 고민이 되어 질문 남깁니다. 그냥 Intellij IDEA를 사용하여 수업을 들어도 괜찮을까요? 에러는 어떻게 해야 해결이 될까요..? 검색해봐도 잘 나오지 않아 여쭤봅니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
roletype 심볼을 찾을 수 없다고 합니다
사진과 같은 문제로 구글링을 해봐서 캐시도 지우고 재시작해보고 rebuild도 해봤는데 해결이 되지 않아 질문 남깁니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
instance_id 설정이 적용되지 않고 있습니다.
안녕하세요 위 사진처럼 인스턴스의 ID가 아래의 yml파일로 설정한데로 적용되지 않고 있어 질문드렸습니다. 커서를 두었을 때 포트번호도 확인해서 해당 인스턴스인것도 확인하였습니다. 원인이나 해결방법을 알 수 있을까요 ㅠㅠ
-
미해결
QueryDSL에서 In 연산자를 사용해 복수개의 컬럼과 비교할때 서브쿼리 없이 쿼리를 생성하는 방법이 있나요?
안녕하세요.QueryDSL에서 in 연산자를 사용해서 쿼리를 작성하려합니다.문제 요약의도 : QueryDSL에서 In연산자를 사용해 비교하는 쿼리 작성하려함. 비교대상 컬럼은 복수개 (in 연산자 좌항) (동적으로 생성한) 리터럴 2차원 배열 (서브쿼리가 아님)문제 : 자꾸 첫째 항목에서 괄호가 사라짐...의문 : queryDSL방법을 잘못 쓴 것인지? 혹은 실제 QueryDSL이나 JPA의 오류인지 알고싶음. 상세 내용작성하려는 쿼리는 입력된 복수개의 은행사와 계좌번호 쌍을 기준으로 계좌(BankAccount)엔티티의 정보를 검색하는 것입니다. 테이블에 "은행사,계좌번호" 쌍 중에 원하는 조합만 검색하는 게 목적입니다. 실제 데이터베이스에서 실행되길 의도한 쿼리select ba.* from bank_account ba where (ba.bank_name, ba.account_num ) in ( /* 입력된 리스트에 따라 가변적으로 변하는 부분 */ /* 아래 조합에만 일치하는 것만 검색 */ ( '하나', '3333-444-555'), ( '국민', '4455-1111-44') /* 조합계속 ... */ ) 따라서 아래와 같이 Expressions.list() 메소드로 IN절의 좌항을 완성하고 in의 파라미터로 서브쿼리 (서브쿼리가 들어가면 잘 동작함) 대신 리터럴 값을 넣어 생성했습니다.QueryDSL에서 쿼리 생성 예시(민감정보 바꾸고 간소화함)fun getBankAccountList( ) jpaQueryFactory.selectFrom(bankAccount) .where( Expressions.list( bankAccount.bank, //은행사 bankAccount.accountNum, // 계좌번호 ).`in`( /* 사용자로부터 입력받은 은행사,계좌번호 쌍들 */ Expressions.list( Expressions.constant(BankName.HANA.value), Expressions.constant("1234-56-789"), ), Expressions.list( Expressions.constant(BankName.HANA.value), Expressions.constant("2345-67-890"), ), Expressions.list( Expressions.constant(BankName.WOORI.value), Expressions.constant("3333-33-333"), ), ) // in() ) // where() .fetch() 실제로 생성된 쿼리를 보면 자꾸 2차원 배열의 첫째 항의 괄호가 사라집니다.생성된 쿼리 예시SELECT /* 컬럼 파트 */ FROM BANK_ACCOUNT B0_ WHERE ( B0_.BANK_NAME, B0_.ACCOUNT_NUM ) IN ( '하나', '1234-56-789', // 여기 첫째 항목의 괄호가 없어짐.. ( '하나', '1234-56-789'), ( '우리', '3333-33-333') )일단 다른 방법으로 기능 구현은 마친 상황입니다.in 절이 본질적으로 각 항목과 컬럼을 동등비교하는 조건이 or연산자 기준으로 반복되는 것을 알고 있기에, 해당 방법으로 기능 자체는 구현은 했습니다. (따라서 왜 괄호가 빠지는 것인지 자체에 대해 집중되었으면 하는 바람이 있습니다. ) 그래서 의문사항은 다음 두가지 입니다.이게 제대로된 queryDSL IN절 사용법이 아니라 그런 것일까요? 아니라면 옳은 방법은 뭘까요?그냥 queryDSL 혹은 JPA의 이슈일까요? 환경언어 : 코틀린(1.5.31)자바버전 : 11queryDSL : 5.0.0springBoot : 2.5.6
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Permission targetId null
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세>> hasPermission targetId null문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.https://github.com/IE-MangChi/RepositoryForAsk.git영상에선 그냥 넘어갔지만 targetId값이 null로 찍히는게 맞는지 잘모르겠습니다.강의내용대로면 저값이 매핑되어야하는데, 공식홈페이지보니 아닌거 같아서 질문드립니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 database 관련 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 테스트 파일 있고.. h2아예 지우고 관련 파일 지우고 다시 깔아서 h2에는 접속은 되는데 인텔리제이에서 연결하려면 저런 코드가 뜨네요.. 어떤문제일까여
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
submit 버튼을 눌렀을때 어떤 api 가 불러와지는지 코드 어디에 쓰여있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저 submit 버튼을 눌렀을때 어떤 api를 호출하는지 html에 없는것 같아서요. <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header"/> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <form th:object="${form}" method="post"> <!-- id --> <input type="hidden" th:field="*{id}"/> <div class="form-group"> <label th:for="name">상품명</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요"/> </div> <div class="form-group"> <label th:for="price">가격</label> <input type="number" th:field="*{price}" class="form-control" placeholder="가격을 입력하세요"/> </div> <div class="form-group"> <label th:for="stockQuantity">수량</label> <input type="number" th:field="*{stockQuantity}" class="form-control" placeholder="수량을 입력하세요"/> </div> <div class="form-group"> <label th:for="author">저자</label> <input type="text" th:field="*{author}" class="form-control" placeholder="저자를 입력하세요"/> </div> <div class="form-group"> <label th:for="isbn">ISBN</label> <input type="text" th:field="*{isbn}" class="form-control" placeholder="ISBN을 입력하세요"/> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <div th:replace="fragments/footer :: footer"/> </div> <!-- /container --> </body> </html>설명해주시면 감사하겠습니다ㅜㅜ