묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
안녕하세요 강사님 active profiles 관련해서 궁금한게 있습니다
보통 아래와같이yml 파일에 이 yml의 profiles가 dev야 라고 명시 해주고 spring: profiles: dev인텔리제이 active profiles에서 dev를 넣어주면매칭이 되는걸로 알고있는데,별도로 안적어주면application-과 .yml 사이에 있는 파일명을 profiles로 인식을 하는건가요?yml 설정 (3) 강의 보고 질문드립니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 실무에서 복합키를 사용하는지 궁금합니다!
안녕하세요 현재 JPA 강의를 모두 듣고 프로젝트를 진행하려고 하는 한 학생입니다. 컨설턴트님이 말하시길, RDB에서는 Index를 통한 조회가 생명이다. 또한 매핑되는 테이블의 경우는 데이터가 계속해서 많이 쌓이기 때문에 auto_increment를 통한 Id 설정보다는 복합키를 설정해서 테이블을 생성하는게 조회 성능에서는 월등히 빠르다. 현재 프로젝트의 볼륨의 경우에는 둘 중 무엇을 선택할지는 자유라고 본다. 그러나 개발자로써 의미있는 테이블 설계를 하고싶다면 조금은 번거롭더라도 복합키로 설정하는 것이 좋다고 보는 견해다.라고 말씀을 하셨는데 JPA 에서도 @Embedded나 @IdClass를 사용한 복합키 사용이 효율적일까요? 또한 복합키를 사용하면 QueryDsl을 사용 할 수있는지 궁금합니다!!
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
mysql 설치 중 질문
mysql 설치 중 developer default라는게 안떠서 custom을 눌러서 connector들을 직접 추가해주려고 하는데 현재 8.0.34 버전은 안뜨네요 혹시 connector는 다른 버전을 설치해도 될까요? 그리고 만약 설치한다면 x86으로 돼있던데 제 컴퓨터는 64비트인데 설치해도 되는건가요??아 그리고 제가 예전에 mysql을 설치했었다가 오류가 떠서 완전히 지우고 이번에 다시 설치하는겁니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2에 member테이블이 생성안됨
섹션1의 h2데이터베이스 설치에서 설명한대로 하고 있는데접속은 되는데 계속 member 테이블 생성이 안되네요ㅠㅠ.yml 파일도 바꿔보고 dependencies도 비슷한 질문들 찾아가면서 다 바꿨는데 왜 이러는건지 모르겠네요jpahsop.mv.db도 제대로 생성된 상황입니다. 이게 제 yml파일이고spring: config: import: device.yml datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: # 알아서 table을 생성해줌 ddl-auto: create properties: hibernate: format_sql: true logging.level: org.hibernate.SQL: debug org.hibernate.type: trace 이건 gradle.build의 dependencies입니다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-starter-jdbc' testImplementation 'junit:junit:4.13.1' 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' }강사님께서는 run하면 console창에 create Member가 뜨는데 저는 안뜨는게 주원인인거 같습니다...어딜 손봐야하는 걸까요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Filter우선순위 질문
안녕하세요! MSA강의 섹션2 Logging Filter관련 부분 듣다가 필터 우선순위와 관련된 궁금증이 생겨서 질문 남깁니다! GatewayFilter filter = new OrderedGatewayFilter((exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("Logging Filter base message: {}",config.getBaseMessage()); if(config.isPreLogger()){ log.info("Logging Filter Start: request uri -> {}",request.getURI()); } //Custom Post Filter return chain.filter(exchange).then(Mono.fromRunnable(()->{ if(config.isPostLogger()){ log.info("Logging Filter End: response Code -> {}",response.getStatusCode()); } })); }, Ordered.HIGHEST_PRECEDENCE); return filter;위와 같은 방식으로 OrderedGatewayFilter를 사용해 filter를 생성했는데 이때 두번째 인자로 Ordered.HIGHEST_PRECEDENCE를 사용할 때와 Ordered.LOWEST_PRECEDENCE를 사용할 때 등장하는 filter 우선순위와 관련된 궁금증이 생겼습니다.HIGHEST를 사용할때는 우선순위가 높은 필터가 먼저 나와서 강의에서도 그렇고 코드 실행결과LoggingFIlter -> GlobalFilter -> CustomFilter의 순서로 Filter 가 등장했는데 그렇다면, 반대로 우선순위가 낮은 경우인 LOWEST를 사용할 때는 CustomFilter -> GlobalFilter -> LoggingFIlter의 순서로 filter가 등장해야한다고 생각하는데 결과가 그렇지 않아서 우선순위에 어떠한 개념이 있는지, 제가 어떤 개념을 놓치고 있는지 의문이 들어 질문글 남깁니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 데이터베이스 연결시 포트번호 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 8082번은 다른 프로젝트 때문에 application.properties에서server.port=8083 로8083번으로 바꿔놨습니다. 여기서 h2.bat 파일을 실행했을 때이렇게 이미 포트 번호가 사용 중이라는 오류가 뜹니다. 그래서 cmd에서netstat -ano | findstr :8083로태스크의 pid를 찾아 해당 태스크를 죽이고,H2 콘솔을 실행시키면당연히 스프링부트에서 이미 포트 번호가 사용 중이라는 오류가 뜹니다. 부트에서 포트 번호를 사용하면 H2에서 안되고H2에서 포트 번호를 사용하면 부트에서 안됩니다. 서버를 통해서 DB에 접속하려는 건데 왜 이런 오류가 뜰까요..서버에서 정상적으로 h2를 연결하고 싶습니다. 혹시 application.properties에서 server.port= 명령어로 임의로 포트를 바꿨기 때문인가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA> DDD 서로 다른 애그리거트 사이의 간접참조
안녕하세요 영한님! 프로젝트에 JPA 및 DDD를 적용하며 의문점이 생기는 부분이 있는데 물어볼 곳이 마땅치 않아서, 이렇게 질문글 올립니다. 구조(요약) - 모노리틱저희 프로젝트에서 다음과 같이 서로 다른 애그리거트 사이에는 간접참조를 통해 느슨하게 결합하여 사용하고 있습니다. 질문다음과 같이 설정하고 나니 몇 가지 의문점이 있습니다. 간접 참조를 통해 느슨한 결합을 하고 있는데, DB 에 따로 외래키 제약 조건을 걸어주어야하는가? 이 부분에 있어서 팀원과 의견이 달라서요. 저는 애그리거트를 나눈 목적이 결국 복잡도를 줄이기 위해서이고, 각각의 애그리거트 안에서 트랜잭션으로 관리가 되어야한다고 생각을 하는데.. 외래키를 설정하면 결국은 User 를 관리할 때 참조 무결성을 신경쓰면서 Trip 까지 고려를 해야돼서 좋지 않다고 생각합니다. 굳이 DB에서 외래키 제약을 걸지 않아도 이벤트를 통해 관리할 수 있다고 생각을 하기도 하구요. 팀원분은 어플리케이션보다는 변경점이 낮은 DB를 우선으로 하며 개발을 해야하고, 그렇기 때문에 반드시 외래키를 걸어주어야한다고 말씀하시는데, 무엇이 더 맞는 말인지 잘 모르겠습니다. 회원 탈퇴(User 삭제)가 이루어질 때 회원과 관련된 모든 Trip 삭제(벌크성 삭제 쿼리)가 이루어지도록 하기 위해서 이벤트를 활용하고 있는데, 이를 비동기적으로 처리해도 문제가 되지 않는가?@Async, @TransactionalEventListener 를 활용해서 회원탈퇴 요청시 회원 삭제가 커밋이 완료 되면 회원이 작성한 여행 정보를 지우는 비동기 이벤트를 발행하도록 하고 있습니다. 회원 탈퇴시 중요한건 회원 정보를 삭제하는 것이라고 생각해서 이를 비동기적으로 처리하는게 옳다고 생각해서 이렇게 구현했는데, 이 방식이 옳은 방식인지 확신이 서질 않습니다. 현업에서는 어떻게 이런 문제를 해결하고 있는지 궁금합니다! 읽어주셔서 감사합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@NotEmpty적용 안되는 오류.
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오[질문 내용]'회원 등록' 강의 듣던 중 오류입니다.회원가입 시 이름이 공백이면 @NotEmpty로 빠꾸시키는 코드 작성한 상태인데, 공백 그대로 db에 저장되고 있습니다. db저장된 후 회원가입을 다시 진행했을 경우에는 기존의 공백을 id로 인식해 "이미 존재하는 회원입니다."라며 500에러가 뜨고 있는 상태이고요.구글링 해보고 chatGPT까지 썼음에도 아직까지 못잡고 있습니다... 도움 부탁드려요.코드 일부 보내드립니다.Controller@Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; //코드 일부 생략 @PostMapping("/members/new") public String create(@Valid MemberForm form, BindingResult result) { if (result.hasErrors()) { return "members/createMemberForm"; } Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode()); Member member = new Member(); member.setName(form.getName()); member.setAddress(address); memberService.join(member); return "redirect:/"; } MemberForm@Getter @Setter public class MemberForm { @NotEmpty(message = "회원명은 필수입니다.") private String name; private String city; private String street; private String zipcode; } createMemberForm.html<div th:replace="fragments/bodyHeader :: bodyHeader"/> <form role="form" action="/members/new" th:object="${memberForm}" method="post"> <div class="form-group"> <label th:for="name">이름</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요" th:class="${#fields.hasErrors('name')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">정확하지 않은 답변입니다.</p>어느 부분이 문제인지 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cacade에 관하여
왜 cascade를 order 엔티티에만 안되는지 궁금합니다. 다른 엔티티들도 매핑이 되있을텐데 (item이라던지) 왜 order 에만 cascade 옵션을 건건가요???
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
히스토리성 앤타타에 대해 어떤식으로 구성하는지 고견 여쭙고 싶습니다.
만약 계좌에 대한 결제 이력을 쌓아야 한다면계좌(one) : 이력(many) 관계로 이력이 쌓일 듯합니다.그런데 이력 테이블의 기본키를 간단히 시퀀스로 관리하자니실제 계좌의 이력을 쿼리로 실행될 때, 쿼리의 성능이 안나올 것 같습니다. 그래서 계좌번호, 거래일자, 일자별 시퀀스 3개의 필드를 복합키로 구성하려고 하는데.. JPA를 활용한엔티티 구성에서 추후에 문제가 되거나 관리에 어려움이 있지 않을까 궁금합니다그리고 실무에서는 어떤식으로 이력성 테이블을 구성하는지도 궁금합니다!!
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
war 파일로 tomcat 배포 방법 문의?
jar 파일이 아닌 war 파일로 빌드하여, tomcat에 배포하고 싶었습니다.tomcat 배포 방법을 알려주시면 감사하겠습니다.사실 검색하여 해보았으나, 이상하게 404 에러가 계속 나오고 있습니다. ㅜㅜintellj에서는 문제 없고, jar 파일 생성후, 실행해도 문제는 없는데, war파일을 tomcat 배포시 문제가 있습니다.강사님의 많은 경험으로, 답변 주시면 감사하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Many To One 매핑시 JoinColumn을 무조건 대상테이블의 PK로만 걸어야하는지
Many 쪽에서 One쪽으로 @JoinColumn을 지정하게되면 그 컬럼은 곧 FK로 사용되는데ID값이 아닌 다른 Unique한 컬럼을 참조하고 싶다면 대체하여도 상관없을까요???예를들어, 게시판에서 글 작성자를 출력한다고 가정합니다.우선적으로 필요한 값은 Nickname하나뿐입니다.User테이블에는 PK값이 자동증가값과 같은 의미없는 고유번호로 부여하고 있다고 가정합니다.Board테이블에서 User테이블의 고유값 PK가 아닌 Nickname의 값만 가져오고 싶고, 해당 값은 중복이 불가능한 Unique한 값이라면PK값이 아닌 해당 값에 걸어도 무방한지요?만약 게시판에서 닉네임뿐만 아니라 닉네임을 눌렀을때 해당 User의 다양한 정보를 얻기 위하면 PK를 가져오는게 맞다고 생각합니다. 하지만 게시판에 User의 PK값에 FK가 걸려있고(Mapping) Board에서 참조하려는 값이 '단순히 닉네임 단 하나'라고 한다면 PK값을 기준으로 닉네임을 다시 한번 조회해야 하기 때문에 불필요한 쿼리가 발생한다고 생각이 듭니다물론 닉네임으로 매핑을 하더라도 Unique한 특성때문에 닉네임 기준으로 User의 정보를 조회할 수는 있겠으나 Board테이블로부터 테이블이 지속적으로 확장되어 나가고 해당 테이블에 User의 PK가 식별관계로 상속되어나간다면 데이터베이스의 PK의 역할로 볼때는 PK로 지정해주는게 맞다고는 생각합니다...위와같이 매핑되는 FK대상 JoinColumn 필드를 비즈니스적 측면에서 유도리있게 설정해도 무관할까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
BeanCreationException 오류 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]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.domain.OrderItem] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-6.0.10.jar:6.0.10] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:931) ~[spring-context-6.0.10.jar:6.0.10] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) ~[spring-context-6.0.10.jar:6.0.10] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.1.jar:3.1.1] at jpabook.jpashop.JpashopApplication.main(JpashopApplication.java:11) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.1.1.jar:3.1.1]Caused 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.domain.OrderItem] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) ~[spring-orm-6.0.10.jar:6.0.10] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.0.10.jar:6.0.10] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816) ~[spring-beans-6.0.10.jar:6.0.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) ~[spring-beans-6.0.10.jar:6.0.10] ... 21 common frames omittedCaused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=jpabook.jpashop.domain.OrderItem] at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:230) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.id.factory.internal.IdentifierGeneratorUtil.createLegacyIdentifierGenerator(IdentifierGeneratorUtil.java:126) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:414) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.internal.SessionFactoryImpl.lambda$createGenerators$1(SessionFactoryImpl.java:413) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:na] at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[na:na] at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na] at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[na:na] at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[na:na] at org.hibernate.internal.SessionFactoryImpl.createGenerators(SessionFactoryImpl.java:412) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:249) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.0.10.jar:6.0.10] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.0.10.jar:6.0.10] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.0.10.jar:6.0.10] ... 25 common frames omittedCaused by: org.hibernate.HibernateException: Could not fetch the SequenceInformation from the database at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:307) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.getSequenceInformationList(ExtractedDatabaseMetaDataImpl.java:151) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.id.enhanced.SequenceStyleGenerator.getSequenceIncrementValue(SequenceStyleGenerator.java:568) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:216) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:224) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] ... 44 common frames omittedCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214] at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214] at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214] at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) ~[h2-2.1.214.jar:2.1.214] at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:745) ~[h2-2.1.214.jar:2.1.214] at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) ~[HikariCP-5.0.1.jar:na] at com.p6spy.engine.wrapper.ResultSetWrapper.getLong(ResultSetWrapper.java:407) ~[p6spy-3.9.0.jar:na] at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:110) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.lambda$extractMetadata$0(SequenceInformationExtractorLegacyImpl.java:54) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:50) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:291) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] ... 48 common frames omitted오류가 발생합니다. 데이터 테이블 생성 자체가 안되고있습니다.yml 설정orderitemorder경로상에 문제는 없었구 이전에 테스트코드에서 member돌린거까지는 db랑 전부 잘 동작했습니다. 스프링부트 3.1 버전 사용중입니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Querydsl 추가 질문입니다
//querydsl 추가 buildscript { dependencies { classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10") } } plugins { id 'org.springframework.boot' version '2.4.1' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' //apply plugin: 'io.spring.dependency-management' apply plugin: "com.ewerk.gradle.plugins.querydsl" configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5' // implementation 'org.hibernate:hibernate-core:5.4.13.Final' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' 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" } //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' //querydsl 추가 implementation 'com.querydsl:querydsl-apt' } tasks.named('test') { useJUnitPlatform() } //querydsl 추가 //def querydslDir = 'src/main/generated' def querydslDir = "src/main/generated" querydsl { library = "com.querydsl:querydsl-apt" jpa = true querydslSourcesDir = querydslDir } sourceSets { main { java { srcDirs = ['src/main/java', querydslDir] } } } compileQuerydsl{ options.annotationProcessorPath = configurations.querydsl } configurations { querydsl.extendsFrom compileClasspath } //Querydsl 추가, 자동 생성된 Q클래스 gradle clean으로 제거 clean { delete file('src/main/generated') } 이런식으로 build.gradle을 구성했는데요. 어플리케이션을 실행하려고만 하면이런 에러가 발생하면서 실행이 되지 않습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Delivery테이블을 따로 사용하는 이유가 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 도메인 모델과 테이블 설계 부분을 보고 궁금한 점이 생겨 질문드립니다.주문과 배송테이블이 일대일 양방향 관계를 가지고 있는데, 배송테이블의 [주소]와 [배송상태] 속성을 주문 테이블에 넣어서 배송테이블 없이 주문테이블 하나로 관리하면 안 좋은 점이 있을까요??감사합니다.
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
안녕하세요 답변 에러가 납니다.,
답변 클릭시 답변 내용 등록하고 답변 클릭하면 400에러가 나는데 어떻게 처리해야되나요??올려주신 git에 SPRINGMVC08 임포트해서 실행해봤는데도 계속해서 똑같은 에러가 발생합니다..
-
미해결Practical Testing: 실용적인 테스트 가이드
이 경우, @BeforeEach에 fixture를 구성해도 될까요?
지금 OrderServiceTest 클래스의 createOrder(), createOrderWithStock(), ... 메서드들은 주문을 생성하기 위해서 given절에서 모두 동일하게 product1, 2, 3을 먼저 생성해주는 fixture가 있습니다. @Test void createOrder() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); Product product1 = createProduct(HANDMADE, "001", 1000); Product product2 = createProduct(HANDMADE, "002", 3000); Product product3 = createProduct(HANDMADE, "003", 5000); productRepository.saveAll(List.of(product1, product2, product3)); OrderCreateServiceRequest request = OrderCreateServiceRequest.builder() .productNumbers(List.of("001", "002")) .build(); // when OrderResponse orderResponse = orderService.createOrder(request, registeredDateTime); // then assertThat(orderResponse.getId()).isNotNull(); assertThat(orderResponse) .extracting("registeredDateTime", "totalPrice") .contains(registeredDateTime, 4000); assertThat(orderResponse.getProducts()).hasSize(2) .extracting("productNumber", "price") .containsExactlyInAnyOrder( tuple("001", 1000), tuple("002", 3000) ); }product를 생성해주는 부분을 @BeforeEach로 빼내려고 하는데, 적절하다고 판단되시는지 궁금합니다. OrderServiceTest의 모든 메서드가 동일한 product를 생성하고는 있지만,각 테스트 메서드에서 "001"이라는 상품이 있는지는 @BeforeEach 메서드까지 스크롤을 왔다갔다하면서 확인해야될거라 생각합니다.(만약 없는 상품을 주문한다면 given절에서 예외가 발생하는 것이기 때문에, 이 부분은 당연히 있는 상품을 주문한다는 것을 보장하고 테스트 코드를 작성해야 할까요?) order에 관한 테스트이기 때문에, product에 대한 부분은 분리해도 될거라 생각하지만, 우빈님의 말씀대로 스크롤을 왔다갔다하면서 @BeforeEach의 메서드를 수시로 보는 것은 안좋다고 느껴져서.. product 생성에 대한 fixture를 분리괜찮다고 생각하시나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
처음에 무한루프 부분에서 궁금한게 있어요!
처음에 무한루프 돌때 갑자기 궁금한게 생겨서요.Order -> MemberOrder -> address 위 엔티티들은 둘다 지연로딩인데실제 모든 Order를 조회 했을 때,'지연로딩'이니깐 실질적으로 Member 엔티티를 건드리지 않는 이상은 Member에는 프록시로 담기는 걸로 이해했습니다.그래서 Jackson이 프록시를 건드리지 못해 에러를 발생하는 걸로 이해했구요.근데 동영상에서 6분9초 때에, 포스트맨에서 결과값들이order, member 등등 엔티티들의 값들이 채워져서 보이는데, 지연로딩인데도 값들이 막 보이는게 이해가 안됩니다.정리하자면...모든 Order만 조회했는데, 지연로딩인데도 Member 등 연관된 엔티티들이 다 조회되는 게 이해가 안됩니다혹시 제가 놓친 부분이 있을까요? 지연로딩이 조금 헷갈리고 있는거 같습니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
jpa의 더티체킹 사용에 대해서
해당 강의에서 도메인 모델과 영속성 객체를 구분하는 리팩토링을 진행하셨는데요.리팩토링 이후 영속성 컨텍스트를 통한 더티체킹을 활용하지 않고, 대신 save 메서드를 매번 호출해 주시는 방법으로 변경하셨더라구요.도메인 모델과 영속성 객체의 의존성을 제거하기 위해서 더티체킹 기능도 사용하지 않는건가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval = true 질문
Order 클래스 list에 orphanRemoval=true 를 주고@OneToMany(mappedBy = "order", cascade = CascadeType.ALL , orphanRemoval=true) private List<OrderItem> orderItems = new ArrayList<>();order.getOrderItems.remove(0); 를 써주면 Order-OrderItem 간의 부모자식 관계가 제거되어서 삭제되는데 추가도 되는지 궁금합니다.주문 리스트 전체 변경을 진행하고 있습니다.Order 가 영속성 컨텍스트에 있을때추가될 Item들 findById로 영속성 컨텍스트로 불러온 다음 OrderItem으로 만든뒤 public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); }order.addOrderItem(orderItem1);order.addOrderItem(orderItem2); 다음과 같이 써주면 db에 추가될 수 있나요???제 테스트 상에서는 데이터가 입력이 되어서 부모-관계가 없어지면 삭제되고 , 부모-관계를 연결시켜주면 추가된다고 생각해도 될까요?