묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
쿠키와 세션
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]여기에 질문 내용을 남겨주세요.HttpSession 사용하기전에는 String sessionId = UUID.randomUUID().toString(); sessionStore.put(sessionId,value); Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId); response.addCookie(mySessionCookie); 세션과 쿠키를 직접 만들어주셨는데login3 부터는HttpSession session = request.getSession(); session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember);세션만 만들어주셨는데 쿠키는 저희가 직접 만들어줬던걸 이제 자동으로 해주는건가요 ?? 질문2 세션은 웹 브라우저를 종료하면 자동으로 삭제 되는거 아닌가요 ??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
수업 자료가 따로 없나요?
선생님이 강의 도중에 html 내용 복붙하고 그러는데 강의 자료가 따로 없나요? 저는 일일이 타자쳐서 넣고 있어서요.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html 하이퍼링크 이동 시 basic.html로 이동
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]localhost:8080으로 접속하여 index.html로 이동하였습니다. 그 이후 jsp 회원가입 전송 후 /jsp/members/save에서 /index.html 로 이동하도록 되어있길래 그리했더니 같은 디렉토리의 basic.html로 이동하게 됩니다. 이동 경로를 '/'로 바꿔주어 해결하였으나 원인이 무엇인지 궁금합니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리 - 세션사용
이 부분에 질문이있는데요getSession시 Object를 반환하잖아요sessionStore에는 Member을 넣어도, Item을 넣어도 결국 Object로 반환해서 넘겨주는데.. 그럼 getSession을 호출하는 곳에서 Object에 대한 구체적인 정보를 사용하고싶어하면 어떡하죠?Member로 변환시켜야하는데, 외부에선 Object타입인것만 알지 Member타입인지는 모르잖아요?
-
해결됨토비의 스프링 부트 - 이해와 원리
코틀린으로 강의 따라하시는 분들이 계시다면 참고하세요. no-arg 설정이 필요합니다.
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/
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assertThat 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]import static org~ 구문 추가 했는데도 계속 이 상태에요. 혹시 몰라서 앞에 Assertions.붙여봤는데도 계속 빨간 상태에요.. 뭐가 문제일까요ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
REST BindingResult 유효성
BindingResult 를 rest로 하진 않았는데, BindingResult 한다면return값이 html주소 이동인데 어떻게 해야하는지와@Size와 같은 @Validated 유효성검사를 할때 에러메시지 커스텀과if (bindingResult.hasErrors()) { return "login/loginForm"; }그냥 @Controller는 .html이동인데 rest는 어떻게 해야할지 모르겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 중 SQLGrammarException 에러 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.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_sequence2023-02-06 11:19:45.627 WARN 10204 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 90036, SQLState: 900362023-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 moreCaused 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 moreorg.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하고 서블릿이 요청을 처리하는 것이고 스프링 웹서버는 서블릿에서 스프링 컨테이너를 이용해서 요청을 처리하는 것입니다.혹여나 개념을 잘못 이해하고 있거나 뒷 내용에 이것에 대한 내용이 나온다면 알려주시면 감사하겠습니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
BooleanCondition 동작 질문
토비님. 안녕하세요!다름이 아니라 '스프링부트의 @Conditional' 항목을 공부하던 중에 conditional() 테스트 코드가 어떻게 동작할지 생각해보았습니다. 저는 true과 false가 1번씩 호출될 것이라고 추측을 했었는데, true가 3번이 호출되어서 생각과는 다른 결과를 확인하였습니다. 제가 무언가를 잘못 알고 있는 것 같아서 확인해보고 싶습니다. 어떠한 키워드로 알아보면 이것에 대해서 알 수 있을까요? 잘려서 보이지 않는 윗부분의 소스 코드는 강의 내용과 다른 점이 없이 작성되어있습니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
수업자료로 올려주신 소스가 실행되지 않습니다.
안녕하세요.전체 흐름을 보려고 소스를 실행하려고 공유해주신 수업자료를 내려받아서 실행해 보니 실행되지 않습니다.Intellij Ultiamte 에서 열어서 실행했습니다.클래스가 작성되어 있지 않다고 나옵니다.import com.studyolle.modules.account.QAccount; import com.studyolle.modules.tag.QTag; import com.studyolle.modules.zone.QZone;이 세 개의 클래스들이 작성되어있지 않습니다.그리고, QStudy 는 import 구문도 없습니다.다시 공유해 주시면 좋겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
addStock, removeStock 동시성
addStock, removeStock의 동시성에 대해서 궁금해서 질문글을 찾아보니 동시성 문제가 당연히 발생할 수 있다는 글을 본적이 있습니다.제가 궁금한 점은 order 클래스내에서 cancel() 메소드를 호출하게 되면, order와 연관된 orderItem 클래스로 들어가서 cancel() 메소드를 호출하게 되고, orderItem과 연관된 Item 클래스로 들어가서 다시 addStock() 메소드를 호출하게 됩니다.여기서 서로 다른 스레드가 DB에서 같은 데이터(같은 레코드)를 가져오는 것은 알겠지만, 서로 다른 스레드가 똑같은 orderItem 인스턴스를 가져와 공유하게 되서 동시성 문제가 발생하는 것인가요?영속성 컨텍스트는 각각의 스레드가 지연 로딩으로 서로 다른 EntityManager를 사용하여 서로 다른 트랜잭션을 사용하기 때문에, 같은 레코드를 DB로부터 가져오지만, 1차 캐시에서 인스턴스 생성시 내부 값만 같은 서로 다른 인스턴스로 생성하지 않을까 하는 추측이 생겨 질문드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
id를 제외한 생성자 만들기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 강의를 듣던 중, 잘 이해하지 못한 부분이 있어 질문 드립니다.1:07초에서 영한님께서"id를 제외한 생성자를 하나 만들겠습니다."라고 하셨는데, 생성자를 만들때 id를 제외하는건지 여쭤봅니다.다음에 작성하는 ItemRepository에서 setId, getId에서 생성자를 만들었기 때문인가요??감사합니다.
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
페이징에서 없는 데이터라고 나옵니다
getPage랑 getPerPageNum이 안읽혀서강사님 깃허브에서 직접 다운받아서 했는데도 안됩니다;;
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
스프링부트를 내려받는중에 오류가발생한거같네요
강의화면과는 달리 templete와 static부분이 전혀안보이네요 그리고 rest 컨트롤러도 안보이네요 여려번 다시 다운받아봤는데도 그대로네요 스프링부트 어플리케이션을 실행해도 오류가 나오네요 설치할떄 기존에 있던 자바하고 스프링부트에서 사용하는 자바버젼하고 충돌이 일어난듯한데 방법이 없을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
그리들 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.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_warningsBUILD SUCCESSFUL in 678ms1 actionable task: 1 executed3:07:08 AM: Execution finished 'dependencies'. 알림이 뜨는데 해결방법이 무엇일까요
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
단일 체크박스 - 체크해제 설정
강의 내용 중 단일 체크박스를 체크하면 원하는 상태로 변하는데, 체크를 풀면 500에러가 발생합니다. 어떻게 코드를 수정해야 할 지 도움을 요청드립니다.강의 내용을 조금 변형해서 - '할일'을 등록할 때 할일 완료상태면 TODO_COMPLETE, 미완료이면 TODO_INCOMPLETE이 되도록 아래와 같이 작성하였습니다. (Todo.java)1) 등록된 할일을 수정할 때 단일 체크박스를 체크하면 완료, 체크를 풀면 미완료가 되도록 아래와 같이 editTodo.html을 작성했습니다.이 경우, 할일 수정 페이지에서 체크를 할 때는 TODO_COMPLETE으로 상태가 잘 변경됩니다. 그런데 다시 체크를 풀면 500에러가 발생하는데요. (org.thymeleaf.exceptions.TemplateInputException 입니다) 그래서 Controller에서 할일 수정하는 핸들러의 구현부에 디버거를 걸고 확인을 했더니빨간 네모에서 처럼 체크를 풀고 저장버튼을 누르면 TODO_INCOMPLETE로 변경되는 것이 아니라 null로 넘어가고 있습니다.2) 그래서 강의 복습 및 구글링으로 아래와 같이 체크박스 부분을 수정했는데요.그랬더니 todoCmplt 상태는 무조건 TODO_INCOMPLETE로 고정되어 체크박스에 체크를 하고 할일 수정(저장)을 해도 체크는 풀리게 되었습니다. (editTodo.html의 체크박스를 여러 번 다르게 수정했지만 모두 실패했습니다.)Todo.java에서 코드가 잘못된 것인지, editTodo.html이 잘못된 것인지 알 수 없어 문의드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 관리 예제에서 등록 시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.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 cause2023-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 cause2023-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참고하셔야 할 파일들의 코드가 있으시면 바로바로 캡처해서 올리겠습니다.'컴포넌트 스캔으로 빈 등록'에서 '자바 코드로 빈 등록'으로 넘어가는 강의에서 직접 코딩을 하다보니 거기에서 오류가 났을지도 모르겠다는 생각도 드네요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰 렌더링 질문드립니다.
안녕하세요. 강의를 듣다가 MyView에서 render()를 하는것이 jsp로 이동하는것, 즉 jsp를 렌더링 하는것이라고 이해했는데요.jsp를 렌더링하는것이 곧 뷰를 렌더링 하는것인가요?jsp렌더링 = 뷰 렌더링이렇게 이해하는게 맞을까요?뷰 렌더링이 어떤것을 의미하는것인지 질문드립니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
region.key 와 region.value 가 어디서 나오는 것인가요? 그리고 region 의 타입은 무엇이 되는건가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]여기에 질문 내용을 남겨주세요.@ModelAttribute("regions") public Map<String, String> regions() { Map<String, String> regions = new LinkedHashMap<>(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); return regions; }<div> <div>등록 지역</div> <div th:each="region : ${regions}" class="form-check form-check-inline"> <input type="checkbox" th:field="${item.regions}" th:value="${region.key}" class="form-check-input" disabled> <label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label> </div> </div> 여기에서 th:each="region : ${regions}"th:value="${region.key}"th:text="${region.value}" 너무 어려워서 체크박스만 어제 오늘 계속 붙들고 다시보고 있는데요 이제 저 3개만 알면 이해갈거같은데 전력을 다해 검색해봐도 도저히 저 3개를 모르겠어요each 에 ${regions} 는 맵인거 같은데 region 은 무슨타입이 들어가길래 key value 라는 값을 쓸수 있는건가요?