묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
처음 DB 설정 후 테스트를 하는 부분에서 오류가 발생합니다.
프로젝트 압축 링크https://drive.google.com/file/d/1xah6ydIWZ1kN-mzwr3-aPRF3Xm9WpRkw/view?usp=sharing 전체 오류 내용은 다음과 같습니다.java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7df4709e testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@29e495ff, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@a3d8174, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@120f102b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@247d8ae, org.springframework.boot.test.context.SpringBootTestAnnotation@6e0b0ab3], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:143)at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127)at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191)at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)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:191)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:232)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.Member]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:931)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436)at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1406)at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:187)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:119)... 27 moreCaused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.Member]at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)... 48 moreCaused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.Member]at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:230)at org.hibernate.id.factory.internal.IdentifierGeneratorUtil.createLegacyIdentifierGenerator(IdentifierGeneratorUtil.java:126)at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:414)at org.hibernate.internal.SessionFactoryImpl.lambda$createGenerators$1(SessionFactoryImpl.java:413)at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779)at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)at org.hibernate.internal.SessionFactoryImpl.createGenerators(SessionFactoryImpl.java:412)at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:249)at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431)at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455)at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75)at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376)at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)... 52 moreCaused by: org.hibernate.HibernateException: Could not fetch the SequenceInformation from the databaseat org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:307)at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.getSequenceInformationList(ExtractedDatabaseMetaDataImpl.java:151)at org.hibernate.id.enhanced.SequenceStyleGenerator.getSequenceIncrementValue(SequenceStyleGenerator.java:568)at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:216)at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:224)... 71 moreCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214]at org.h2.message.DbException.getJdbcSQLException(DbException.java:502)at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)at org.h2.message.DbException.get(DbException.java:223)at org.h2.message.DbException.get(DbException.java:199)at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492)at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:745)at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java)at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:110)at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.lambda$extractMetadata$0(SequenceInformationExtractorLegacyImpl.java:54)at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:50)at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39)at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:291)... 75 more 1년전 수강 완료한 강의지만 다시 듣는 과정에서 오류가 발생한거라작년 코드와 비교도 해보고 구글링을 통해 build.gradle이나 application.yml에 문제가 있는 것 같다고 생각했지만아직 해결하지 못했습니다. 현재 제 applicaiton.yml 이고build.gradle 입니다plugins {id 'java'id 'org.springframework.boot' version '3.1.1'id 'io.spring.dependency-management' version '1.1.0'}group = 'jpabook'version = '0.0.1-SNAPSHOT'java {sourceCompatibility = '17'}configurations {compileOnly {extendsFrom annotationProcessor}}repositories {mavenCentral()}dependencies {implementation 'org.springframework.boot:spring-boot-starter-data-jpa'implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.boot:spring-boot-devtools'implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' //test코드 오류나서 추가testImplementation 'junit:junit:4.13.1'compileOnly 'org.projectlombok:lombok'runtimeOnly 'com.h2database:h2'annotationProcessor 'org.projectlombok:lombok'testImplementation 'org.springframework.boot:spring-boot-starter-test'testImplementation("org.junit.vintage:junit-vintage-engine") {exclude group: "org.hamcrest", module: "hamcrest-core"}}tasks.named('test') {useJUnitPlatform()}
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
어떤 트랜잭션에서 COMMIT을 평생 안하면
어떤 트랜잭션에서 COMMIT을 평생 안하면, 해당 ROW에 대한 Lock이 평생 풀리지 않을 텐데 MySQL기준으로 이와 관련된 timeout 설정같은 것이 있을까요? 만약 COMMIT이 되지 않고 어플리케이션이 죽었을 경우, DB의 Session이 wait_timeout 만큼 기다렸다가 종료될 것이고 이때 비로소 해당 ROW의 Lock이 해제되는 걸까요? 만약 그렇다면 그 절차도 궁금합니다. DB마다 정책이 다르겠지만 MySQL 기준으로 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SpringMemberControllerV1. 404에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요.서블릿으로 구현할때까지는 잘 실행 되었는데..스프링mvc 부터 자꾸 404가 뜹니다.브라우저에서 입력하면 매핑된 process메서드는 실행을 하는데 modelAndView에서 에러가 나는거 같습니다.맨 밑 사진은 디버깅해봤는데..class has no fields랍니다..modelAndView를 따로 처리를 해줘야 되는건가요?아니면 다른걸 잘못하고 있는건가요..?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션2 HTTP요청 데이터 - POST HTML Form 강의 질문
안녕하세요 섹션2 HTTP요청 데이터 -POST HTML Form 강의에서hello-form에서 username과 age 를 입력하고 제출 버튼을 누르면 f12에서 이렇게 request-param을 확인하셨는데 저는 제출을 눌러도 이게 뜨지 않습니다.그러나 콘솔에서는 getParameter()로 값을 정상적으로 출력을 하는데 f12에서는 왜 확인이 안될까요?
-
미해결스프링 핵심 원리 - 기본편
파라미터가 있는 빈을 필드주입 할 때
@Slf4j @SpringBootTest public class InternalCallV2Test { ##1## @Autowired CallService callService; @Test void internalCallV2(){ callService.external(); } @TestConfiguration static class InternalCallV1TestConfig{ @Bean CallService callService(){ return new CallService(internalService()); } @Bean InternalService internalService(){return new InternalService();} } @RequiredArgsConstructor static class CallService{ ##2## private final InternalService internalService; public void external(){ internalService.internal(); } } static class InternalService{ public void internal(){ } } }위와 같은 코드가 있을 때(1) 필드 주입@Autowired CallService callService;에서 callService이름의 빈을 찾아 객체를 주입 받습니다.(2) 생성자 주입@RequiredArgsConstructor static class CallService{ private final InternalService internalService;}에서 CallService의 생성자에 @Autowired를 통해 의존관계를 자동으로 주입받습니다.제가 궁금한건 빈을 등록할 때@Bean CallService callService(){ return new CallService(internalService());}CallService는 파라미터가 있는객체로 등록되는데 필드주입을 하게되면 그냥 CallService객체를 주입 받는 건가요????(파라미터가 있는 지 무시하고)생성자 주입은 파라미터가 있으니까 어떤게 주입되는지 보이는 데 필드주입은 잘 모르겠습니다... 답변주시면 정말 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Error parsing HTTP request header 문제
안녕하세요.MVC 2편 파일 업로드 강의를 수강하는 중 발생하는 문제 질문드립니다.스프링 버전 문제인가 싶어서, 강사님 프로젝트를 그대로 다운로드해서 빌드했는데도 (2.5.1 버전), 모든 페이지에서 저렇게 에러가 발생합니다.(index페이지만가도) 어떤 부분을 수정해야할까요 ? 2023-07-08 12:06:39.541 INFO 8668 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'2023-07-08 12:06:39.542 INFO 8668 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2023-07-08 12:06:39.543 INFO 8668 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms2023-07-08 12:06:39.636 DEBUG 8668 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [728]2023-07-08 12:06:39.636 DEBUG 8668 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Received []2023-07-08 12:06:39.637 DEBUG 8668 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@240fb734:org.apache.tomcat.util.net.NioChannel@3c42f742:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:53200]], Status in: [OPEN_READ], State out: [OPEN]2023-07-08 12:06:43.954 DEBUG 8668 --- [nio-8080-exec-2] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [728]2023-07-08 12:06:43.955 DEBUG 8668 --- [nio-8080-exec-3] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [0]2023-07-08 12:06:43.970 DEBUG 8668 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request headerjava.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1345) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1255) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:799) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:359) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.46.jar:9.0.46] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]2023-07-08 12:06:43.970 DEBUG 8668 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
An error occurred at line: [6] in the jsp file: [/jsp/members/save.jsp]
save.jsp 에서 화면에서 jsp가 제대로 등록되지 않은 같습니다. <에러코드> An error occurred at line: [14] in the generated java file: [C:\Users\ParkWonkyoung\AppData\Local\Temp\tomcat.8080.2915155530144798779\work\Tomcat\localhost\ROOT\org\apache\jsp\jsp\members\save_jsp.java]Only a type can be imported. hello.servlet.domain.member.MemberRepository resolves to a packageAn error occurred at line: [15] in the generated java file: [C:\Users\ParkWonkyoung\AppData\Local\Temp\tomcat.8080.2915155530144798779\work\Tomcat\localhost\ROOT\org\apache\jsp\jsp\members\save_jsp.java]Only a type can be imported. hello.servlet.domain.member.Member resolves to a packageAn error occurred at line: [6] in the jsp file: [/jsp/members/save.jsp]MemberRepository cannot be resolved to a type3: <%@ page contentType="text/html;charset=UTF-8" language="java" %>4: <%5: // request, response 사용 가능6: MemberRepository memberRepository = MemberRepository.getInstance();7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));An error occurred at line: [6] in the jsp file: [/jsp/members/save.jsp]MemberRepository cannot be resolved3: <%@ page contentType="text/html;charset=UTF-8" language="java" %>4: <%5: // request, response 사용 가능6: MemberRepository memberRepository = MemberRepository.getInstance();7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));An error occurred at line: [10] in the jsp file: [/jsp/members/save.jsp]Member cannot be resolved to a type7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));10: Member member = new Member(username, age);11: System.out.println("member = " + member);12: memberRepository.save(member);13: %>An error occurred at line: [10] in the jsp file: [/jsp/members/save.jsp]Member cannot be resolved to a type7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));10: Member member = new Member(username, age);11: System.out.println("member = " + member);12: memberRepository.save(member);13: %>Stacktrace:] with root causeorg.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: [14] in the generated java file: [C:\Users\ParkWonkyoung\AppData\Local\Temp\tomcat.8080.2915155530144798779\work\Tomcat\localhost\ROOT\org\apache\jsp\jsp\members\save_jsp.java]Only a type can be imported. hello.servlet.domain.member.MemberRepository resolves to a packageAn error occurred at line: [15] in the generated java file: [C:\Users\ParkWonkyoung\AppData\Local\Temp\tomcat.8080.2915155530144798779\work\Tomcat\localhost\ROOT\org\apache\jsp\jsp\members\save_jsp.java]Only a type can be imported. hello.servlet.domain.member.Member resolves to a packageAn error occurred at line: [6] in the jsp file: [/jsp/members/save.jsp]MemberRepository cannot be resolved to a type3: <%@ page contentType="text/html;charset=UTF-8" language="java" %>4: <%5: // request, response 사용 가능6: MemberRepository memberRepository = MemberRepository.getInstance();7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));An error occurred at line: [6] in the jsp file: [/jsp/members/save.jsp]MemberRepository cannot be resolved3: <%@ page contentType="text/html;charset=UTF-8" language="java" %>4: <%5: // request, response 사용 가능6: MemberRepository memberRepository = MemberRepository.getInstance();7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));An error occurred at line: [10] in the jsp file: [/jsp/members/save.jsp]Member cannot be resolved to a type7: System.out.println("save.jsp");8: String username = request.getParameter("username");9: int age = Integer.parseInt(request.getParameter("age"));10: Member member = new Member(username, age);11: System.out.println("member = " + member);12: memberRepository.save(member);13: %>
-
해결됨스프링 부트 웹 개발 입문 - 따라하며 배우기
메뉴명이 안나와요~
소스는 구글에 올리겠습니다..
-
미해결스프링 핵심 원리 - 기본편
프로토타입 빈 관련 질문있습니다.
@Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean bean = ac.getBean(PrototypeBean.class); String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) System.out.println("beanDefinitionName = " + beanDefinitionName); } } @Scope("prototype") static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy " +this); } } 프로토타입 빈을 ac.getBean 을 통해 요청하고 그 이후에 스프링 컨테이너를 조회했을때 프로토타입 빈이 존재하는지 확인해볼려고 위와 같이 코드를 작성하였습니다.그 결과로이와 같이 프로토타입 빈이 스프링 컨테이너에 있는걸 확인했습니다. 여기서 궁금한 점이 1. 스프링 컨테이너가 프로토타입 빈을 관리하지 않는 시점이란게 ac.getBean(PrototypBean.class) 을 실행한 바로 이후가 맞을까요? 2. ac.getBean(PrototypBean.class) 를 통해 빈을 반환하였고 그 뒤로는 스프링 컨테이너에서 해당 빈을 관리하지 않는다면 왜 프로토타입 빈이 여전히 스프링 컨테이너에서 조회가 되는지 궁금합니다. 제가 생각해본 바로는 ac.getBean(PrototypBean.class) 이후에는 스프링 컨테이너에 해당 프로토타입빈이 존재하지 않지만, 해당 프로토타입 빈의 beanDefintion은 여전히 존재하여 위와 같은 결과가 나왔다라고 생각이 들었는데 이게 맞을까요? 3. 해당 PrototypeBean 클래스에는 @PostConstruct 어노테이션을 통해 프로토타입 스프링빈이 의존관계 주입을 마칠떄 beanDefinitionName = ... 메세지가 뜨도록 설정하였습니다. 그런데 위 예제에서는AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class);코드로 한번PrototypeBean bean = ac.getBean(PrototypeBean.class);코드로 두번 프로토타입 빈을 요청하였으므로 해당 메세지가 2번이 떠야하는게 아닌가요? 왜 한번만 발생하는지 궁금합니다. 이것도 제가 생각해본 바로는 스프링컨테이너를 생성하는 시점에 싱글톤타입과 다르게 프로토타입은 beanDefinition 만 생성이되고 스프링빈이 생성되지는 않기 때문에 위와 같은 결과가 나왔다라고 생각이 들었는데 이게 맞는 내용인지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
internalCall() 실행 질문입니다.
@Test void internalCall(){ callService.internal(); } static class CallService{ @Transactional public void internal(){ log.info("call internal"); printTxInfo(); } private void printTxInfo(){ boolean txActive = TransactionSynchronizationManager.isActualTransactionActive(); log.info("tx active={}", txActive); } }강의 pdf에서 트랜잭션 적용 후 실제 callService 객체 인스턴스의 internal() 을 호출한다 라고 되있는데 언제 실제 internal()을 호출하는 지 잘 모르겠습니다.트랜잭션 시작 - printTxInfo()(실제 callService 객체 인스턴스의 internal() 을 호출) - 트랜잭션 종료 라고 생각이 드는데 맞게 생각한건지 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 데이터 JPA
data jpa 사용 시 쿼리도 aop 같은 방식이 적용 가능한가요?
안녕하세요. 강의 듣고, jpa이용해서 팀 프로젝트 만들어 보고 있습니다.다름이 아니라, 게시글 삭제 시, 정말 게시글이 삭제되는 것이 아니라, 게시글 안의 Enum 에 deleted로 변경 해 두고, 일정 시간이 삭제되게 하려고 했습니다.변경 까지는 문제가 없었는데, 이렇게 기능이 추가가 되니, 기존에 게시 글을 반환하던 쿼리 들에 전부where status = 'ACTIVE' 와 같은 조건을 넣어주어야 하게 되었습니다. 전부 수작업으로.... 조건을 넣어주는 방법 밖에는 없을까요? 간단한 프로젝트라고 생각해서 QueryDsl은 사용하지 않았습니다.또 저 조건을 개발자가 전부 쿼리 개발 할 때 필수로 넣어야 된다면, 어쩌다 까먹고 안 넣게되면 삭제 처리 되었던 게시글이 사용자 눈에 보이는..참사가 발생할 것 같습니다.기존 Repository 쿼리가 실행되기 전에 먼저 article.status = 'ACTIVE' 인 것들만 필터를 하고, 거기에 제가 지금까지 만들어 놓은 쿼리들이 적용이 되면 될 것 같은데, 아무리 찾아봐도 좋은 대안이 보이지가 않아 보여서 혹시나 하는 마음에 질문 드립니다.감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
orderItems 에 null이 들어가는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 듣다 의문점이 생겨 질문 드립니다.OrderDto는 JPA에서 생성된 객체가 아니고 직접 생성자로 만들어서 사용한 객체인데 왜 Hibernate5Module이 프록시 객체로 생각해서 null값을 반환하는지 모르겠습니다.제가 긴시간 찾아보면서 생각한 이유는 이렇습니다.강의 5분경 쯤에 api 호출시 Json에서 orderItems 가 null로 반환되는것을 보여주십니다.orderItems가 null로 반환되는것은 스프링이 string으로 응답을 보낼때 messageConverter가 json으로 변환해서 반환을합니다.이때 orderItems가 JPA(Hibernate)에서 만든 프록시 객체로 되어있어 전강의에서 설정한 Hibernate5Module이 프록시 객체를 null로 바꾸기 때문에 orderItems가 null로 나타낸것으로 생각됩니다.하지만 제가 디버깅 모드로 확인해본 결과 OrderDto안에 있는 orderItems는 프록시 객체가 아닌 실제로 생성된 객체였습니다.(OrderDto는 단순히 JPA가 관리 하지 않아서 당연하다고 생각합니다.)강의 기준으로 orderItems 안에 있는 orderItem객체가 2개 존재하는데 orderItem객체는 JPA를 통해 생성된 객체이고 자세히 살펴보면 orderItem 안에 Item은 LAZY로딩으로 프록시 객체가 생성되어있습니다. 혹시몰라 Hibernate5Module을 끄고 실행한 결과 Item이 @JsonIgnore가 있으면 orderItems가 제대로 결과 값이 나오고 @JsonIgnore이 없으면 프록시 객체를 Json으로 변환하지 못해서 오류가 발생합니다.그럼 Hibernate5Module는 엔티티 안에 객체의 값중 하나라도 프록시 객체가 있다면 다른 객체의 값이 있든 말든 그냥 null을 반환하는 걸까요??제가 이해한것이 맞는지 궁금해서 질문드립니다.긴글 읽어주셔서 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요. 커리큘럼 관련 질문 하나만 드리겠습니다!
안녕하세요. 더운 날씨에 고생 많으십니다.다름이 아니라, 가장 최근에 영한쌤 유튜브 채널에 올라온 영상을 보면스프링 기본편 -> MVC1,2편 -> DB1,2편을 수강하고, 야생형 코스로 넘어와 JPA활용1편을 내용이 이해되지 않더라도 코드를 따라친다는 생각으로 강의를 듣고,그 다음에 JPA 기본편으로 넘어가서 공부한뒤 다시 JPA활용 1편으로 넘어와 공부를 하라고 말씀해주셨었는데요.요약하자면, 코드만 따라친다는 생각으로 JPA활용 1편 -> JPA 기본 -> 다시 JPA활용1편 복습. 이런식으로요!근데 JPA활용1편 강의 도중에 "연관관계 매핑 분석" 부분에서 이 내용이 이해가 안된다면 반드시 JPA 기본편을 다시 수강하고 오시라고 말씀하시더라구요.. 당연히 배우지 않은 내용이라 이해가 안됐습니다..!그냥 가장 최근에 올라온 영한쌤 유튜브 영상처럼 일단 코드만 따라친다는 생각으로 JPA활용1편을 완강하면 되는걸까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
lombok 설치오류
롬북 설치했고 어노테이션 설치 활성화 체크표시 했는데 롬북을 찾을 수 없는거 같습니다. 어떻게 해야할까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
SQLSyntaxErrorException 에러가 나옵니다.ㅠㅠ
서버 실행 후 이름, 나이 작성하고 등록을 하려는데 '서버내부 오류가 생겼다' 라는 팝업창이 뜨면서 아래와 같은 오류가 나옵니다.ㅠㅠ 혹시 인코딩 문제일까요..? java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSET INTO user (name, age) VALUES ('���ڵ�', 25)' at line 1
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
도메인 객체 질문
심폐소생술 PPT처럼Presentation, Business, Domain, Persistence로 나눈다고 하면 @Entity가 붙은 Class는 Persistence에 두고@Entity가 붙지 않은 Domain Class는 Domain에 둬서클래스를 2개를 만드는 건가요?예를 들어 아래 MemberEntity는 Persitence Package에 위치하고@Entity public class MemeberEntity { ... }public class MemberDomain { ..MemberDomain은 Domain Package에 위치하게 해서Service Class에서 Repository를 이용해서 MemberEntity를 가져온 다음에 MemberEntity를 MemberDomain으로 변환한 다음에 비즈니스 로직을 작성하면 되는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DispatcherServlet 오류 문제
MVC부분에서 http://localhost:8080/hello-mvc?name=spring!!! 이렇게 치면 404error가 뜹니다.controller코드는 이런 식으로 작성했습니다.서버 연결 시에도 이걸로 연결을 잘 했습니다. 기본 static.html 등은 잘 보이는데 controller을 이용해서 하면 404에러가 뜹니다. 어떤 식으로 해결을 해야할지 모르겠습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이 오류
이렇게 에러는 안나는데 화면에는 나오지않습니다. 그리고 실행버튼이 활성화 안되있어서 제가 인터넷보고 설정하긴했는데 실행 등록하는 부분에 문제가 있을까요>빠른답변부탁합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
insert문이 실행이 안돼요
html 화면에서 회원가입 submit 후 메인 화면으로 돌아오는 것은 같은데 콘솔에도 insert 문은 안뜨네요ㅠㅠ이렇게 DB에서 조회시 select문만 콘솔에 뜨고이런식으로 이름 값은 제대로 뜨지만 나머지값은 보이지 않습니다. 막상 DB에는 없습니다 코드는 제가 입력 후 위의 문제로 강의자료 코드 복붙해서 변경했습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 동기화 매니저 작동 원리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]내부 트랜잭션의 경우, 트랜잭션 동기화 매니저에서 con이 있으면, 생성하지 않고 그걸 가져다가 사용한다고 배웠습니다. 그림에는 단순하게 보여주기 위해 트랜잭션 동기화 매니저에 con이 하나만 있는 경우 인데, 실제로는 여러개가 있을텐데 그중에 아무거나 가져다 쓰나요?? 아니면 내부 트랜잭션을 호출한 외부 트랜잭션의 con을 찾아서 쓰려나요??