public Optional findById(Long id) { List result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id); return result.stream ().findAny(); } private RowMapper memberRowMapper() { return (rs, rowNum) -> { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return member; }; } 이 두 함수가 이해가 안되서 질문드립니다 ㅠ rs가 정확히 무엇인지 그리고 memberRowMapper()은 member객체를 반환하는데 어떻게 List로 받을수 있는지 궁금합니다
BeanPostProcessor는 매개변수가 없는 no-arg 생성자를 필요로 하는데요, 자바의 경우 굳이 매개변수를 생성자에서 주입하지 않아도 되지만 코틀린의 경우 JPA 엔티티나 현재 강의의 ServerProperties처럼 프로퍼티값을 읽어들여 객체를 생성하는 경우 생성자 파라미터를 보통 사용하실 텐데요, 이 경우 따로. noarg 생성자가 만들어지지 않기 때문에 BeanPostProcessor가 디폴트 생성자를 만들어낼 수 있도록 kotlin("plugin.allOpen") kotlin("plugin.noArg")을 이용해서 @Component 어노테이션으로 빈에 대한 no-arg 기능을 활성화해야합니다. gradle에서 다음과 같이 plugin을 포함하시구요 plugins{ kotlin("plugin.noarg") version "1.7.22" //jpa를 사용하신다면 kotlin("plugin.jpa")에 포함되어 있습니다. } 아래에 Component 어노테이션에서 no-arg가 활성화될 수 있게 해당 부분을 적어주시면 됩니다. noArg { annotation("org.springframework.stereotype.Component") } all-open, no-arg 등의 플러그인에대한 더 자세한 설정에 대해서 궁금하시다면 아래 글을 참고하시면 좋습니다. https://techblog.woowahan.com/2675/
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] import static org~ 구문 추가 했는데도 계속 이 상태에요. 혹시 몰라서 앞에 Assertions.붙여봤는데도 계속 빨간 상태에요.. 뭐가 문제일까요ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요? 스프링 부트 & JPA 강의 듣고 있는 수강생입니다. MemberRepository 테스트 중 SQLGrammarException이 발생하여 테스트가 실패합니다. MemberRepository의 save 메서드 아래 em.persist(member) 부분 때문에 발생한 것으로 보이는데 그 이유를 잘 모르겠습니다. 영한님의 야생형 루트에 따라 JPA 수업을 아직 안듣고, 바로 실전으로 들어와서 그런제 jpa에 대한 기초가 약합니다. 로그 남깁니다. 도움 부탁드리겠습니다. 2023-02-06 11:19:45.353 INFO 10204 --- [ main] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@6d167f58 testClass = MemberRepositoryTest, testInstance = jpabook.jpashop.MemberRepositoryTest@7682bf66, testMethod = testMember@MemberRepositoryTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@3403e2ac testClass = MemberRepositoryTest, locations = '{}', classes = '{class jpabook.jpashop.JpashopApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@38102d01, org.springframework.boot.test.autoconfigure.properties .PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@610f7aa, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@2118cddf, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@76ed1b7c, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@1d8bd0de, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@293a5bf6], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@78b8f818]; rollback [false] 2023-02-06 11:19:45.625 DEBUG 10204 --- [ main] org.hibernate.SQL : call next value for hibernate_sequence 2023-02-06 11:19:45.627 WARN 10204 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 90036, SQLState: 90036 2023-02-06 11:19:45.628 ERROR 10204 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Sequence "HIBERNATE_SEQUENCE" not found; SQL statement: call next value for hibernate_sequence [90036-200] 2023-02-06 11:19:45.666 WARN 10204 --- [ main] o.s.test.context.TestContextManager : Caught exception while invoking 'afterTestMethod' callback on TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@20435c40] for test method [public void jpabook.jpashop.MemberRepositoryTest.testMember()] and test instance [jpabook.jpashop.MemberRepositoryTest@7682bf66] org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only at org.springframework.transaction.support .AbstractPlatformTransactionManager.processCommit( AbstractPlatformTransactionManager.java:752 ) ~[spring-tx-5.3.2.jar:5.3.2] at org.springframework.transaction.support .AbstractPlatformTransactionManager.commit( AbstractPlatformTransactionManager.java:711 ) ~[spring-tx-5.3.2.jar:5.3.2] at org.springframework.test.context.transaction.TransactionContext.endTransaction( TransactionContext.java:131 ) ~[spring-test-5.3.2.jar:5.3.2] at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod( TransactionalTestExecutionListener.java:255 ) ~[spring-test-5.3.2.jar:5.3.2] at org.springframework.test.context.TestContextManager.afterTestMethod( TestContextManager.java:441 ) ~[spring-test-5.3.2.jar:5.3.2] at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate( RunAfterTestMethodCallbacks.java:94 ) ~[spring-test-5.3.2.jar:5.3.2] at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate( SpringRepeat.java:84 ) ~[spring-test-5.3.2.jar:5.3.2] at org.junit.runners.ParentRunner.runLeaf( ParentRunner.java:366 ) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:251 ) ~[spring-test-5.3.2.jar:5.3.2] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:97 ) ~[spring-test-5.3.2.jar:5.3.2] at org.junit.runners.ParentRunner$4.run( ParentRunner.java:331 ) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner$1.schedule( ParentRunner.java:79 ) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.runChildren( ParentRunner.java:329 ) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.access$100( ParentRunner.java:66 ) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner$2.evaluate( ParentRunner.java:293 ) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate( RunBeforeTestClassCallbacks.java:61 ) ~[spring-test-5.3.2.jar:5.3.2] at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate( RunAfterTestClassCallbacks.java:70 ) ~[spring-test-5.3.2.jar:5.3.2] at org.junit.runners.ParentRunner$3.evaluate( ParentRunner.java:306 ) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.run ( ParentRunner.java:413 ) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run ( SpringJUnit4ClassRunner.java:190 ) ~[spring-test-5.3.2.jar:5.3.2] at org.junit.runner.JUnitCore.run ( JUnitCore.java:137 ) ~[junit-4.13.1.jar:4.13.1] at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( JUnit4IdeaTestRunner.java:69 ) ~[junit-rt.jar:na] at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute( IdeaTestRunner.java:38 ) ~[junit-rt.jar:na] at com.intellij.rt.execution.junit.TestsRepeater.repeat( TestsRepeater.java:11 ) ~[idea_rt.jar:na] at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs( IdeaTestRunner.java:35 ) ~[junit-rt.jar:na] at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:235 ) ~[junit-rt.jar:na] at com.intellij.rt.junit.JUnitStarter.main( JUnitStarter.java:54 ) ~[junit-rt.jar:na] org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [call next value for hibernate_sequence]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException( HibernateJpaDialect.java:259 ) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible( HibernateJpaDialect.java:233 ) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible( AbstractEntityManagerFactoryBean.java:551 ) at org.springframework.dao.support .ChainedPersistenceExceptionTranslator.translateExceptionIfPossible( ChainedPersistenceExceptionTranslator.java:61 ) at org.springframework.dao.support .DataAccessUtils.translateIfNecessary( DataAccessUtils.java:242 ) at org.springframework.dao.support .PersistenceExceptionTranslationInterceptor.invoke( PersistenceExceptionTranslationInterceptor.java:152 ) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:186 ) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:749 ) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept( CglibAopProxy.java:691 ) at jpabook.jpashop.MemberRepository$$EnhancerBySpringCGLIB$$2b302b5c.save(<generated>) at jpabook.jpashop.MemberRepositoryTest.testMember( MemberRepositoryTest.java:26 ) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( FrameworkMethod.java:59 ) at org.junit.internal.runners.model.ReflectiveCallable.run ( ReflectiveCallable.java:12 ) at org.junit.runners.model.FrameworkMethod.invokeExplosively( FrameworkMethod.java:56 ) at org.junit.internal.runners.statements.InvokeMethod.evaluate( InvokeMethod.java:17 ) at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate( RunBeforeTestExecutionCallbacks.java:74 ) at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate( RunAfterTestExecutionCallbacks.java:84 ) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate( RunBeforeTestMethodCallbacks.java:75 ) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate( RunAfterTestMethodCallbacks.java:86 ) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate( SpringRepeat.java:84 ) at org.junit.runners.ParentRunner.runLeaf( ParentRunner.java:366 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:251 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:97 ) at org.junit.runners.ParentRunner$4.run( ParentRunner.java:331 ) at org.junit.runners.ParentRunner$1.schedule( ParentRunner.java:79 ) at org.junit.runners.ParentRunner.runChildren( ParentRunner.java:329 ) at org.junit.runners.ParentRunner.access$100( ParentRunner.java:66 ) at org.junit.runners.ParentRunner$2.evaluate( ParentRunner.java:293 ) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate( RunBeforeTestClassCallbacks.java:61 ) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate( RunAfterTestClassCallbacks.java:70 ) at org.junit.runners.ParentRunner$3.evaluate( ParentRunner.java:306 ) at org.junit.runners.ParentRunner.run ( ParentRunner.java:413 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run ( SpringJUnit4ClassRunner.java:190 ) at org.junit.runner.JUnitCore.run ( JUnitCore.java:137 ) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( JUnit4IdeaTestRunner.java:69 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute( IdeaTestRunner.java:38 ) at com.intellij.rt.execution.junit.TestsRepeater.repeat( TestsRepeater.java:11 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs( IdeaTestRunner.java:35 ) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:235 ) at com.intellij.rt.junit.JUnitStarter.main( JUnitStarter.java:54 ) Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert( SQLExceptionTypeDelegate.java:63 ) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert( StandardSQLExceptionConverter.java:42 ) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert( SqlExceptionHelper.java:113 ) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:186 ) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement( StatementPreparerImpl.java:75 ) at org.hibernate.id .enhanced.SequenceStructure$1.getNextValue( SequenceStructure.java:93 ) at org.hibernate.id .enhanced.NoopOptimizer.generate( NoopOptimizer.java:40 ) at org.hibernate.id .enhanced.SequenceStyleGenerator.generate( SequenceStyleGenerator.java:523 ) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId( AbstractSaveEventListener.java:115 ) at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient( DefaultPersistEventListener.java:185 ) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist( DefaultPersistEventListener.java:128 ) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist( DefaultPersistEventListener.java:55 ) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener( EventListenerGroupImpl.java:102 ) at org.hibernate.internal.SessionImpl.firePersist( SessionImpl.java:720 ) at org.hibernate.internal.SessionImpl.persist( SessionImpl.java:706 ) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke( SharedEntityManagerCreator.java:311 ) at com.sun.proxy.$Proxy86.persist(Unknown Source) at jpabook.jpashop.MemberRepository.save ( MemberRepository.java:16 ) at jpabook.jpashop.MemberRepository$$FastClassBySpringCGLIB$$a3e1a60b.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke( MethodProxy.java:218 ) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint( CglibAopProxy.java:771 ) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:163 ) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:749 ) at org.springframework.dao.support .PersistenceExceptionTranslationInterceptor.invoke( PersistenceExceptionTranslationInterceptor.java:137 ) ... 38 more Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement: call next value for hibernate_sequence [90036-200] at org.h2.message.DbException.getJdbcSQLException( DbException.java:576 ) at org.h2.message.DbException.getJdbcSQLException( DbException.java:429 ) at org.h2.message.DbException.get( DbException.java:205 ) at org.h2.message.DbException.get( DbException.java:181 ) at org.h2.command.Parser.readSequence( Parser.java:7678 ) at org.h2.command.Parser.readTermWithIdentifier( Parser.java:4593 ) at org.h2.command.Parser.readTerm( Parser.java:4311 ) at org.h2.command.Parser.readFactor( Parser.java:3343 ) at org.h2.command.Parser.readSum( Parser.java:3330 ) at org.h2.command.Parser.readConcat( Parser.java:3305 ) at org.h2.command.Parser.readCondition( Parser.java:3108 ) at org.h2.command.Parser.readExpression( Parser.java:3059 ) at org.h2.command.Parser.parseCall( Parser.java:6480 ) at org.h2.command.Parser.parsePrepared( Parser.java:905 ) at org.h2.command.Parser.parse( Parser.java:843 ) at org.h2.command.Parser.parse( Parser.java:815 ) at org.h2.command.Parser.prepareCommand( Parser.java:738 ) at org.h2.engine.Session.prepareLocal( Session.java:657 ) at org.h2.server.TcpServerThread.process( TcpServerThread.java:278 ) at org.h2.server.TcpServerThread.run ( TcpServerThread.java:183 ) at java.base/java.lang.Thread.run( Thread.java:834 ) at org.h2.message.DbException.getJdbcSQLException( DbException.java:576 ) at org.h2.engine.SessionRemote.done( SessionRemote.java:611 ) at org.h2.command.CommandRemote.prepare( CommandRemote.java:85 ) at org.h2.command.CommandRemote.<init>( CommandRemote.java:51 ) at org.h2.engine.SessionRemote.prepareCommand( SessionRemote.java:481 ) at org.h2.jdbc.JdbcConnection.prepareCommand( JdbcConnection.java:1235 ) at org.h2.jdbc.JdbcPreparedStatement.<init>( JdbcPreparedStatement.java:76 ) at org.h2.jdbc.JdbcConnection.prepareStatement( JdbcConnection.java:352 ) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement( ProxyConnection.java:337 ) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement( HikariProxyConnection.java ) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare( StatementPreparerImpl.java:90 ) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:176 ) ... 62 more org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only at org.springframework.transaction.support .AbstractPlatformTransactionManager.processCommit( AbstractPlatformTransactionManager.java:752 ) at org.springframework.transaction.support .AbstractPlatformTransactionManager.commit( AbstractPlatformTransactionManager.java:711 ) at org.springframework.test.context.transaction.TransactionContext.endTransaction( TransactionContext.java:131 ) at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod( TransactionalTestExecutionListener.java:255 ) at org.springframework.test.context.TestContextManager.afterTestMethod( TestContextManager.java:441 ) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate( RunAfterTestMethodCallbacks.java:94 ) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate( SpringRepeat.java:84 ) at org.junit.runners.ParentRunner.runLeaf( ParentRunner.java:366 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:251 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:97 ) at org.junit.runners.ParentRunner$4.run( ParentRunner.java:331 ) at org.junit.runners.ParentRunner$1.schedule( ParentRunner.java:79 ) at org.junit.runners.ParentRunner.runChildren( ParentRunner.java:329 ) at org.junit.runners.ParentRunner.access$100( ParentRunner.java:66 ) at org.junit.runners.ParentRunner$2.evaluate( ParentRunner.java:293 ) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate( RunBeforeTestClassCallbacks.java:61 ) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate( RunAfterTestClassCallbacks.java:70 ) at org.junit.runners.ParentRunner$3.evaluate( ParentRunner.java:306 ) at org.junit.runners.ParentRunner.run ( ParentRunner.java:413 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run ( SpringJUnit4ClassRunner.java:190 ) at org.junit.runner.JUnitCore.run ( JUnitCore.java:137 ) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( JUnit4IdeaTestRunner.java:69 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute( IdeaTestRunner.java:38 ) at com.intellij.rt.execution.junit.TestsRepeater.repeat( TestsRepeater.java:11 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs( IdeaTestRunner.java:35 ) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:235 ) at com.intellij.rt.junit.JUnitStarter.main( JUnitStarter.java:54 )
안녕하세요. 토비님 강의 너무 잘듣고 있습니다. 강의를 듣다가 궁금한점이 생겨서 질문남깁니다. 우선 저는 독립형 스프링 애플리케이션까지 들었습니다. 강의를 들으면서 스프링과 스프링 부트의 차이점과 이점은 이해가 쉽게 됐습니다. 하지만 서블릿 웹서버와 스프링 웹서버의 차이점에 대해서는 명확하게 이해하지 못했습니다. 독립 실행형 서블릿 애플리케이션으로 웹 서버를 띄우는 것보다 독립 실행형 스프링 애플리케이션으로 웹 서버를 구성하는 것이 어떤 장점이 있는지 궁금합니다. 제가 이해한 바로는 서블릿 웹서버는 HTTP요청이 들어오면 컨테이너가 서블릿을 Mapping하고 서블릿이 요청을 처리하는 것이고 스프링 웹서버는 서블릿에서 스프링 컨테이너를 이용해서 요청을 처리하는 것입니다. 혹여나 개념을 잘못 이해하고 있거나 뒷 내용에 이것에 대한 내용이 나온다면 알려주시면 감사하겠습니다.
토비님. 안녕하세요! 다름이 아니라 '스프링부트의 @Conditional' 항목을 공부하던 중에 conditional() 테스트 코드가 어떻게 동작할지 생각해보았습니다. 저는 true과 false가 1번씩 호출될 것이라고 추측을 했었는데, true가 3번이 호출되어서 생각과는 다른 결과를 확인하였습니다. 제가 무언가를 잘못 알고 있는 것 같아서 확인해보고 싶습니다. 어떠한 키워드로 알아보면 이것에 대해서 알 수 있을까요? 잘려서 보이지 않는 윗부분의 소스 코드는 강의 내용과 다른 점이 없이 작성되어있습니다.
안녕하세요. 전체 흐름을 보려고 소스를 실행하려고 공유해주신 수업자료를 내려받아서 실행해 보니 실행되지 않습니다. Intellij Ultiamte 에서 열어서 실행했습니다. 클래스가 작성되어 있지 않다고 나옵니다. import com.studyolle.modules.account.QAccount; import com.studyolle.modules.tag.QTag; import com.studyolle.modules.zone.QZone; 이 세 개의 클래스들이 작성되어있지 않습니다. 그리고, QStudy 는 import 구문도 없습니다. 다시 공유해 주시면 좋겠습니다.
addStock, removeStock의 동시성에 대해서 궁금해서 질문글을 찾아보니 동시성 문제가 당연히 발생할 수 있다는 글을 본적이 있습니다. 제가 궁금한 점은 order 클래스내에서 cancel() 메소드를 호출하게 되면, order와 연관된 orderItem 클래스로 들어가서 cancel() 메소드를 호출하게 되고, orderItem과 연관된 Item 클래스로 들어가서 다시 addStock() 메소드를 호출하게 됩니다. 여기서 서로 다른 스레드가 DB에서 같은 데이터(같은 레코드)를 가져오는 것은 알겠지만, 서로 다른 스레드가 똑같은 orderItem 인스턴스를 가져와 공유하게 되서 동시성 문제가 발생하는 것인가요? 영속성 컨텍스트는 각각의 스레드가 지연 로딩으로 서로 다른 EntityManager를 사용하여 서로 다른 트랜잭션을 사용하기 때문에, 같은 레코드를 DB로부터 가져오지만, 1차 캐시에서 인스턴스 생성시 내부 값만 같은 서로 다른 인스턴스로 생성하지 않을까 하는 추측이 생겨 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. gradle실행시 A web-based, searchable dependency report is available by adding the --scan option. Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. See https://docs.gradle.org/7.6/userguide/command_line_interface.html#sec:command_line_warnings BUILD SUCCESSFUL in 678ms 1 actionable task: 1 executed 3:07:08 AM: Execution finished 'dependencies'. 알림이 뜨는데 해결방법이 무엇일까요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원 관리 예제 웹 MVC 개발> 회원 웹 기능 - 조회 이 강의에서 선생님의 결과와 제 결과가 다르게 나와서 질문 드립니다. [회원 가입]을 눌러서 spring1, spring2를 등록하시고 [회원 목록] 탭에서 2개의 회원이 등록됨을 보이시는데, 저는 spring1을 등록하고 회원 목록을 들어 가보면 이렇게 1하고 공백으로 나오고 여기서 spring2를 등록하면 이런 페이지가 나오며 인텔리제이에서도 잘 돌아가던 서버의 Run 창에서 오류가 죽 뜹니다. 짧은 지식으로 보기에는 뭐 어디가 null값이다 라는 오류들이 많이 뜨는데 제 선에서는 어디부터 어떻게 만져야 할지 잘 모르겠습니다 ㅠㅠ 아래는 인텔리 Run창에서 뜨는 오류입니다 캡처로 잘리는 부분들을 사진 중간에 남기겠습니다. 2023-02-05T22:19:39.413+09:00 ERROR 2956 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "hello.hellospring.domain.Member.getName()" is null] with root cause 2023-02-05T22:26:18.541+09:00 ERROR 2956 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "hello.hellospring.domain.Member.getName()" is null] with root cause 2023-02-05T22:27:45.238+09:00 ERROR 2956 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "hello.hellospring.domain.Member.getName()" is null] with root cause 참고하셔야 할 파일들의 코드가 있으시면 바로바로 캡처해서 올리겠습니다. '컴포넌트 스캔으로 빈 등록'에서 '자바 코드로 빈 등록'으로 넘어가는 강의에서 직접 코딩을 하다보니 거기에서 오류가 났을지도 모르겠다는 생각도 드네요
안녕하세요 강의 수강 중 프로젝트 폴더를 다른 폴더에 저장하고 싶어서 이동시켰습니다. 그 후 인텔리제이로 프로젝트를 열어보니 폴더가 보이지 않는 오류가 있어 구글링해서 오류를 해결하고자 했는데요. ( 참고했던 블로그: https://solbel.tistory.com/2712) 그 후 다시 확인해 보니 디렉토리 구조도 정상적으로 다 뜨지 않는 것 같고 스프링 프레임워크도 사라진 것 같습니다...ㅠ 일반 자바 프로젝트는 폴더 위치를 옮겨도 문제가 생기지 않았는데 스프링 프로젝트만 이런것인지.. 혹시 해결할 수 있는 방법이 있을까요?