안녕하세요! 좋은 강의 감사드립니다. 많은 도움이 되었어요. 한 가지 궁금한 점이 있는데요. 실무를 하면서 개발용 DB에 이미 다른 테스트용 row 가 저장되어 있을 때 tearDown으로 deleteAllInBatch 를 사용하게 되면 해당 테스트에서 추가된 데이터뿐만 아니라 모든 데이터가 전부 삭제되는 것으로 알고 있는데 이러한 상황을 원치 않는다면 직접 하나하나 수동 삭제해 주거나 Transactional 롤백을 사용하고 계신지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오 [질문 내용] 안녕하세요. 정확히 강의 내용과 일치하는 내용은 아니지만 JPA 를 공부하다 궁금한 부분이 생겨 질문드립니다. save() 와 saveAndFlush() 의 차이점은 saveAndFlush() 시에는 즉시 DB 로 flush 가 일어나 DB 에 변경내역이 동기화되는 차이가 있는 것으로 알고 있습니다. 하지만 그렇다고 해서 commit 이 일어난 것은 아니기 때문에 다른 트랜잭션에서 변경된 내용을 확인할 수 있는 것도 아닐 것 같습니다. (READ UNCOMMIT 격리수준이 아니라면) 변경된 내역을 확인 가능한 곳은 같은 트랜잭션에 한정된 부분이라면 굳이 flush 를 하지 않아도 1차캐시와 쓰기지연저장소에서 확인이 가능한 부분일 것 같은데 saveAndFlush() 를 왜 사용해야 하는 것인지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강의 잘 듣고 있습니다. 강의를 듣다가 궁금증이 생겨 질문 드립니다. 양방향 연관관계의 설정이 언제 필요할지 생각을 해보았는데 게시글과 댓글의 일대 다 관계에서 게시글을 조회할때 댓글이 같이 조회되는것을 원하는 경우가 있을 것 같습니다. 그렇다면 이전강의에 말씀하셨던 무한 루프(?)에 빠질 수 있을 것 같은데요. 아마 이걸 순환참조라고 말한다고 알고 있습니다. 그러면 애초에 댓글은 댓글대로 따로 조회하고 게시글을 조회할때 댓글 조회하는 방식 즉 연관관계의 주인이 아닌곳에서 리스트를 조회하려고 하는 방식은 안쓰는것이 좋은것인가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, cascade 설정과정에서 궁굼증이 생겨 문의드립니다. 부모 객체와 자식객체 양쪽다 CascadeType. ALL 옵션을 주고, 부모쪽에 orphanRemoval = true 옵션을 준 상태에서 Parent parent = new Parent(); Child child = new Child(); Child child2 = new Child(); parent.addChild(child); parent.addChild(child2); Team findParent = em.find(Parent.class, 1L); findParent.getChild().remove(0); 와 같이 진행 했을때, child가 삭제됨 child가 삭제되며 cascade 옵션에 의해 부모인 team을 삭제함 team을 삭제하기 전 cascade 옵션에 의해 자식에 포함된 child를 모두 삭제함 team이 삭제됨 이렇게 이해했고 실제로 parent, child, child2 모두 삭제 되었습니다. 그런데 Parent parent = new Parent(); Child child = new Child(); Child child2 = new Child(); Child child3 = new Child(); ... Child childN = new Child(); parent.addChild(child); parent.addChild(child2); parent.addChild(child3); ... parent.addChild(childN); Team findParent = em.find(Parent.class, 1L); findParent.getChild().remove(0); 이렇게 자식을 3개 이상 넣어줬을경우 자식객체 2개만 삭제(remove에 넣어주는 index에 따라 2개 삭제될 자식이 결정됨)되고 나머지 자식과 부모는 남아있는걸로 확인되는데... 어떤 매커니즘때문에 이런 현상이 나오는걸까요?..
Error creating bean with name 'entityManagerFactory' Could not determine recommended JdbcType for toyProject1.board.domain.Member 요런 에러가 떠서 계속 구글링을 해보았는데 저는 제가 작성한 Member 엔티티에서 문제를 못찾겠어요ㅠㅠㅠ 연관관계 매핑도 일대다로 잘한 것 같은데,,, 정말 귀찮으시겠지만 제발 한번만 봐주세요ㅠㅠㅠㅠ 삽질중입니다..... https://drive.google.com/file/d/1ylrcAJFzmTZM8FXjzw_lVCM0zWiyRt9-/view?usp=sharing
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 조금은 다를수있습니다. 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 강의와는 조금 다를수있지만 /mebers/{id} 이렇게 조회를 하면 누군가도 똑같은 url을 입력하여 해당 정보를 볼수 있다고 생각하는데 이런거에 대한 위험성같은거는 따로 처리하는 방법?같은게 있는지 궁금합니다.
테스트 내 yml 설정을 통해서 내부 메모리로 사용할 수 있다고 하셨는데 인텔티제이 안의 내부 메모리를 사용하는건가요? 또 테스트 수행 시 마다 내부 메모리는 초기화가 되는건가요? 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
org.springframework.dao.InvalidDataAccessApiUsageException: 에 대해서 ... org.springframework.dao.InvalidDataAccessApiUsageException:,For queries with named parameters you need to use provide names for method parameters.,Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.;,nested exception is java.lang.IllegalStateException:,For queries with named parameters you need to use provide names for method parameters.,Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters. 강사님은 아래와 같이 @Param 을 붙여주지 않았는데도 에러가 안나셨는데 혹시 어떤 설정을 제가 놓친걸까요 .. ? @Repository public interface OrderRepository extends JpaRepository<Order, Long> { @Query("select o from Order o where o.registeredDateTime >= :startDateTime" + " and o.registeredDateTime < :endDateTime" + " and o.orderStatus = :orderStatus") List<Order> findOrdersBy(@Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime") LocalDateTime endDateTime, @Param("orderStatus") OrderStatus orderStatus); }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의를 쭉 따라가면서 OrderService 구현까지 하고있는데 제가 생각하기에는 OrderService에 Delivery를 생성하는 부분에서 DeliveryStatus를 READY로 세팅 해야 될것 같은데 강의에서는 이부분이 빠져있어서 혹시 제가 놓친 부분이 있을까요? @Transactional public Long order(Long memberId, Long itemId, int count) { Item item = itemRepository.findById(itemId); Member member = memberRepository.findById(memberId); //배송정보 생성 Delivery delivery = new Delivery(); //delivery status 세팅 --------------------------- delivery.setStatus(DeliveryStatus.READY); //----------------------------------------------- delivery.setAddress(member.getAddress()); //주문상품 생성 OrderItem orderItem = OrderItem.createOrderItem(item, item.getPrice(), count); //주문 생성 Order order = Order.createOrder(member, delivery, orderItem); orderRepository.save(order); return order.getId(); }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 영한님, 해당 부분 공부하다가 이리저리 검색해보다가 질문 남깁니다! https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21710&category=questionDetail&tab=community&q=659760 해당 글에서 서포터즈님께서 답변해주신 바로는, orphanRemoval = false 설정시 findParent.getChildList().remove(0); 를 통하여 부모객체에서 자식리스트의 자식객체를 삭제하면, DB에는 그대로 남아있지만, FK키가 null로 변한다고 답변해주셨는데요. 제가 실제로 테스트 해본 결과에는.. DB에 FK키가 그대로 부모의 PK키를 명시하고 있습니다. 어떤 것이 맞는 것인지 궁금합니다. import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", orphanRemoval = false) private List<Child> childList = new ArrayList<>(); public void addChild(Child child){ childList.add(child); child.setParent(this); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Child> getChildList() { return childList; } public void setChildList(List<Child> childList) { this.childList = childList; } } @Entity public class Child { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Parent getParent() { return parent; } public void setParent(Parent parent) { this.parent = parent; } } package hellojpa; import javax.persistence.*; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); findParent.getChildList().remove(0); // em.remove(findParent); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close(); } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 영한님의 강의를 모두사서.. 탐독하는 주니어 개발자 입니다 ㅎㅎ.. 21:37 부분에 영속성 전이 + 고아 객체, 생명주기 파트에서 이해가 가지 않는 부분이 있어서요. 위에서 명시해놓으시기를 CascadeType.ALL + orpahanRemover=true 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있음 이라고 명시되어있습니다. 제가 궁금한부분은 CascadeType.ALL 자체가 CascadeType.ALL + orpahanRemove=true 를 이미 모두 포함하고 있다는 생각이 드는데요.. CascadeType.All 만 설정 CascadeType.All + orpahanRemove=true 모두 설정 두 가지의 차이가 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 그 강의에서 동적 쿼리 작성은 QueryDSL을 사용해야 한다고 했는데, 강의에서 em.createQuery()로 JPQL을 작성하고 setParameter를 통해 바인딩을 한다면 그게 동적 쿼리 작성하는거 아닌가요??? 굳이 QueryDSL을 사용해야할 이유가 있나요??
GitHub Actions을 사용하여 우분투 가상환경 위에서 스프링 부트 프로젝트를 빌드할 일이 있었는데요. 빌드 과정에서 테스트를 실행하는 단계가 있더라구요! application-test.yml에서 사용할 db의 정보를 지정하는 부분에 로컬 호스트 디비를 사용했는데 우분투 가상환경에서 테스트가 수행되다보니로컬호스트 디비와 연결하는 과정에서 커넥션 에러가 뜨더라구요 ㅠㅠ 이런 경우에선 테스트 환경에서 인메모리 디비를 사용해야 하나요..??어떤 방법이 최선인지 궁금해서 질문 남기게 되었습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 엔티티 클래스 개발2 강의에서 Address 객체의 빈생성자를 만들때 protected를 사용하는것을 봤습니다. 혹시 여기서 어노테이션 @NoArgsConstructor(access = AccessLevel.PROTECTED) 를 사용해도 나중에 문제가 없을지 궁금합니다. 또 생성자를 어노테이션으로 만드는 것이 안좋을 수 있는 상황이 있는지 궁금합니다.
안녕하세요. 김영한 선생님의 강의를 참 잘 보고 있는 학생입니다. SQL 중심적인 개발의 문제점 편에서, 객체지향 프로그래밍에서 객체는 자유롭게 객체 그래프를 탐색할 수 있어야하 지만 SQL로 개발하는 경우에는 처음 실행하는 SQL에 따라 탐색 범위가 결정된다 는 문제가 있다고 말씀하셨습니다. 그리고 엄격한 도메인 주도 설계의 관점에서는 '도메인 객체'와 '엔티티 객체'를 분리 해야 한다고 알고 있습니다. 비즈니스 로직을 다루는 도메인 객체가 JPA 라고 하는 기술에 의존하는 것은 영 즐거운 일은 아니기 때문이죠.. ( https://stackoverflow.com/questions/24703756/having-separate-domain-model-and-persistence-model-in-ddd ) 그렇기 때문에 도메인 객체와 엔티티 객체를 분리하게 된다면 Repository 계층에서 예를 들어 findById 를 했을 경우 엔티티 객체를 도메인 객체로 매핑해서 돌려주어야 합니다. 그런데 이럴 경우, 기존의 SQL로 개발하는 경우와 비슷한 문제가 발생하게 되는 것 같습니다. 매핑을 어디까지해서 돌려주어야 하느냐는 점이죠. Member 를 조회했을 때, 객체 그래프 안에 있는 Category까지 싹싹 다 조회해와서 매핑을 해주기도 곤란한 노릇이고, MemberWithTeam , MemberWithOrderAndOrderItem... 와 같은 객체를 따로 따로 만드는 것도 요상해보입니다. 그렇다고 객체 그래프를 다 끊어놓자니 그것도 객체지향적이지 않은 것 같아보이구요.. 이런 상황에서는 어떤 식으로 도메인 객체를 설계하는지, 엔티티 객체의 매핑은 어떤 방법으로 이루어지는지가 너무 궁금합니다.
java.io .StreamCorruptedException: invalid type code: 00 > invalid type code: 00 * Try: > Run with --scan to get full insights. * Exception is: org.gradle.api.UncheckedIOException: java.io .StreamCorruptedException: invalid type code: 00 at org.gradle.internal.UncheckedException.throwAsUncheckedException( UncheckedException.java:62 ) at org.gradle.internal.UncheckedException.throwAsUncheckedException( UncheckedException.java:41 ) at org.gradle.tooling.internal.provider.serialization.PayloadSerializer.deserialize( PayloadSerializer.java:78 ) at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run ( ClientProvidedPhasedActionRunner.java:51 ) at org.gradle.launcher.exec.ChainingBuildActionRunner.run ( ChainingBuildActionRunner.java:35 ) at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run ( ProblemReportingBuildActionRunner.java:49 ) at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run ( BuildOutcomeReportingBuildActionRunner.java:65 ) at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run ( FileSystemWatchingBuildActionRunner.java:140 ) at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run ( BuildCompletionNotifyingBuildActionRunner.java:41 ) at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0( RootBuildLifecycleBuildActionExecutor.java:40 ) at org.gradle.composite.internal.DefaultRootBuildState.run ( DefaultRootBuildState.java:122 ) at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute( RootBuildLifecycleBuildActionExecutor.java:40 ) at org.gradle.internal.buildtree.InitDeprecationLoggingActionExecutor.execute( InitDeprecationLoggingActionExecutor.java:58 ) at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute( DefaultBuildTreeContext.java:40 ) at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0( BuildTreeLifecycleBuildActionExecutor.java:65 ) at org.gradle.internal.buildtree.BuildTreeState.run ( BuildTreeState.java:53 ) at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute( BuildTreeLifecycleBuildActionExecutor.java:65 ) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call( RunAsBuildOperationBuildActionExecutor.java:61 ) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call( RunAsBuildOperationBuildActionExecutor.java:57 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute( DefaultBuildOperationRunner.java:204 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute( DefaultBuildOperationRunner.java:199 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute( DefaultBuildOperationRunner.java:66 ) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute( DefaultBuildOperationRunner.java:59 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute( DefaultBuildOperationRunner.java:157 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute( DefaultBuildOperationRunner.java:59 ) at org.gradle.internal.operations.DefaultBuildOperationRunner.call ( DefaultBuildOperationRunner.java:53 ) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call ( DefaultBuildOperationExecutor.java:73 ) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute( RunAsBuildOperationBuildActionExecutor.java:57 ) at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0( RunAsWorkerThreadBuildActionExecutor.java:36 ) at org.gradle.internal.work .DefaultWorkerLeaseService.withLocks( DefaultWorkerLeaseService.java:249 ) at org.gradle.internal.work .DefaultWorkerLeaseService.runAsWorkerThread( DefaultWorkerLeaseService.java:109 ) at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute( RunAsWorkerThreadBuildActionExecutor.java:36 ) at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute( ContinuousBuildActionExecutor.java:110 ) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute( SubscribableBuildActionExecutor.java:64 ) at org.gradle.internal.session.DefaultBuildSessionContext.execute( DefaultBuildSessionContext.java:46 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply( BuildSessionLifecycleBuildActionExecuter.java:100 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply( BuildSessionLifecycleBuildActionExecuter.java:88 ) at org.gradle.internal.session.BuildSessionState.run ( BuildSessionState.java:69 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute( BuildSessionLifecycleBuildActionExecuter.java:62 ) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute( BuildSessionLifecycleBuildActionExecuter.java:41 ) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute( StartParamsValidatingActionExecuter.java:64 ) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute( StartParamsValidatingActionExecuter.java:32 ) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute( SessionFailureReportingActionExecuter.java:50 ) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute( SessionFailureReportingActionExecuter.java:38 ) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute( SetupLoggingActionExecuter.java:47 ) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute( SetupLoggingActionExecuter.java:31 ) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild( ExecuteBuild.java:65 ) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute( BuildCommandOnly.java:37 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute( WatchForDisconnection.java:39 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute( ResetDeprecationLogger.java:29 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute( RequestStopIfSingleUsedDaemon.java:35 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create( ForwardClientInput.java:78 ) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create( ForwardClientInput.java:75 ) at org.gradle.util.internal.Swapper.swap( Swapper.java:38 ) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute( ForwardClientInput.java:75 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute( LogAndCheckHealth.java:64 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild( LogToClient.java:63 ) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute( BuildCommandOnly.java:37 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild( EstablishBuildEnvironment.java:84 ) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute( BuildCommandOnly.java:37 ) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed( DaemonCommandExecution.java:104 ) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run( StartBuildOrRespondWithBusy.java:52 ) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run( DaemonStateCoordinator.java:297 ) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute( ExecutorPolicy.java:64 ) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run( ManagedExecutorImpl.java:49 ) Caused by: java.io .StreamCorruptedException: invalid type code: 00 at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke( DirectMethodHandleAccessor.java:103 ) at org.gradle.tooling.internal.provider.serialization.PayloadSerializer.deserialize( PayloadSerializer.java:76 ) ... 69 more 실전! 스프링부터와 JPA활용1 듣고있는데 첫 시작부터 빌드가 되지않습니다. 혹시 잘못된점이 있을까요..ㅠㅠ? 강의 자료대로 build.gradle Gradle 전체 설정은 복붙한 상태입니다.
* bootstrap 라이브러리를 추가하고 아래와 같이 application.yml 파일만으로 설정하면 적용이 안됩니다. dependency에 bootstrap을 의존성 추가하지 않습니다 . 그 후 application.yml파일에 아래와 같이 설정합니다. spring: cloud: config: name: ecommerce # yml 파일명 앞부분 config: import: optional:configserver:http://localhost:8888 # 구성정보 설정 강의에서 나오는 bootstrap.yml 설정 정보를 Spring Boot 2.4버전 이후부터는 application.yml 설정 정보에서 사용할 수 있습니다. ( 공식홈페이지 ) 위 방법은 공식 홈페이지 목차에서 Spring Cloud Config Client - Spring Boot Config Data Import 부분에 나와있습니다. 만약 bootstrap 라이브러리를 사용한 구성설정을 하고 싶다면 공식홈페이지 목차에서 Spring Cloud Config Client - Config First Bootstrap 부분을 살펴보시면 되겠습니다.