묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 데이터 JPA
테스트 시 생성자 주입에 관하여
package com.myproject.jpaboard.web.service; import com.myproject.jpaboard.domain.Post; import com.myproject.jpaboard.web.repository.BoardRepository; import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.Optional; @SpringBootTest @RequiredArgsConstructor class PostServiceTest { private final BoardRepository boardRepository; private final PostService postService; @Test void addViewCount() { Optional<Post> byId = boardRepository.findById(1L); Post post = byId.get(); System.out.println("post.getViewCount() = " + post.getViewCount()); postService.addViewCount(1L); System.out.println("post.getViewCount2() = " + post.getViewCount()); } }안녕하세요. 개인적으로 배운것들을 따로 테스트중입니다. 위의 코드와 같이 생성자 주입을 하니 boardRepository에 NullPointerException이 발생하였습니다. @Autowired를 이용한 필드 주입으로 코드를 수정해보니 문제가 해결되었습니다. 원인을 추측해보면, 테스트 메서드 실행할 때 주입받을 빈이 초기화되어있지 않기 때문으로 보입니다.이런 상황이 처음이라 지식 공유자님의 의견을 듣고싶습니다.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
PathVariable이 제대로 인식되지 않는 문제
본 강의 REST컨트롤러 - 수정/삭제, CORS 설정 시청중에Putmapping, DeleteMapping 쪽에서 파라미터를 @PathVariable로 받는데, postMan에서 테스트 요청을 보냈을때 파라미터가 전달되지 않습니다. @PathVariable(name="tno") 처럼 name을 명시하니까 제대로 파라미터가 받아지던데요 원래는 name은 생략 가능한게 아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 작성시 에러가 발생합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원 기능 테스트 강의를 수강하며 회원가입 테스트 예제를 작성하고 실앻해도 계속 에러가 나옵니다. 코드도 모두 동일하게 쳣는데 에러가 뜨니 어떻게해야할지 모르겟습니다. ㅠㅠ 10:53:19.411 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.service.MemberServiceTest]: MemberServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.10:53:19.579 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.service.MemberServiceTest10:53:19.906 [Test worker] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running이렇게 에러문구 3개가 뜨는데 뭐가 틀린지 모르겟습니다. 도움주시면 감사하겟습니다.
-
미해결실전! Querydsl
동적 order by..
쿼리dsl로 동적인 order by 정렬 처리하는거는 강의에서 안보여주시나요?...ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ModelAttribute 사용유무가 궁금합니다.
public class Order 클래스중 //==생성 메서드==// public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.now()); return order; }위에는 jpa1강 파트이고아래는 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 상품 등록 처리 파트에서 @ModelAttribute 중 일부입니다.jpa에서는 혹시 @ModelAttribute 이부분을 못쓰나요? 아니면 쓸 쑤는 있는데 주문처럼 생성메서드일때는 안쓰는건가요? // @PostMapping("/add") public String addItemV2(@ModelAttribute("item") Item item, Model model) { itemRepository.save(item); // model.addAttribute("item", item); //자동 추가, 생략 가능 return "basic/item"; }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문입력시 질문입니다.
아래와 같은 에러가 조회됩니다.Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 19, col 33)] with root cause에러상황: 주문 입력시 화이트 페이지 조회전체코드:아래에서 하라는대로 다 해봤는데 안됩니다. 참고로 order자바,orderservice자바는 강의와 똑같습니다. https://www.inflearn.com/questions/362231/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-%EC%9D%B4%EB%9F%AC%ED%95%9C-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%AC%EA%B2%8C-%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4
-
미해결실전! 스프링 데이터 JPA
spring data jpa의 merge() 를 쓰지 말고 persist() 만 쓰라는 걸까요??
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 merge 를 쓰지 않는게 좋다고 이야기 해 주셨는데, spring data jpa의 save() 를 실무에서 쓰지 말라는 뜻일까요?? 아니면 쓰되 isNew 로직을 타도록 잘 세팅해두라는 뜻일까요?? 실무에서는 객체 저장 어떻게 하는지 궁금합니다~!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]orphanRemoval 개념을 설명할 때, 부모 엔티티와 자식 엔티티에 대해서 이야기 하셨는데 부모 엔티티와 자식 엔티티를 정하는 기준이 어떻게 되나요?다대일 개념에서 다쪽이 자식 엔티티이고 일쪽이 부모 엔티티가 되는건가요?
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
서비스 메소드 작성 시 질문!
안녕하세요 쥬쥬님 서비스에서 메서드를 만들 때 질문 있습니다. A라는 서비스 메소드를 만들 때 로직이 복잡하면 코드가 엄청 길어지면 그 때는 안에 있는 메소드를 B, C 서비스 메소드로 분리해야 할 것 같은데 서비스 메소드를 만들 때 기준이 있나요?지금 createReview 서비스 메소드를 만들때restaurantRepository.findById(restaurantId).orElseThrow()를 사용하여 조회 및 검증 작업을 진행하는데 추후에 해당 코드를 그대로 유지하는지, 서비스 메소드로 분리하는지, 스태틱 메서드로 만드는지 기준이 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 도메인 요구사항 설계 중 의문점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 5. 상품 도메인 개발 수강 중 궁금한 점이 있어 글 올립니다!상품 도메인 비즈니스 요구사항에는 1. 상품 등록 2. 상품 목록 조회 3. 상품 수정 이 있는데 핵심 비즈니스 로직을 정의하는 클래스인 ItemService(상품 서비스 클래스)에서는 오직 1. 상품 등록 2. 상품 목록 조회 로직만 설계하신 것을 알 수 있었습니다.상품 리포지토리에서 상품 등록 로직(save(Item item))에 if - else 문을 통해 merge()가 3. 상품 수정 기능을 해서 상품 서비스 클래스에서 설계를 안 하신 걸로 봐도 될까요?
-
해결됨
@Transactional을 붙이는 위치가 궁금합니다. (Service, ServiceImpl..)
회원 정보 수정 API를 구현하며 dirty checking을 이용한 회원 정보 update를 사용했습니다.service의 update 메소드를 호출하기 전과 후를 controller단에서 로그를 찍어보니 정보가 잘 변경되는데 DB에는 반영이 되지 않아 애를 먹었습니다.serviceImpl단의 update 메소드에 @Transactional을 붙여서 해결했습니다. 그 전에는 service단의 update 메소드에 @Transactional을 붙였더니 안되더라구요.service단의 메소드에 붙이는 @Transactional와 serviceImpl단의 메소드에 붙이는 @Transactional이 다른 트랜잭션으로 작동하는건지, 그렇다면 어디에 @Transactional을 붙이는게 맞는건지 궁금합니다.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
Entity에 ElementCollection이 두 개 있는 경우
안녕하세요! 하나의 엔티티에 @ElementCollection 붙은 필드가 두 개 있는 경우를 시험해 보고 있습니다. @EntityGraph(attributePaths = {"a", "b"}) 이런 식으로 해서 테스트를 돌리면 org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags 과 같은 오류가 나는데 ElementCollection 두 개가 있는 경우는 하나의 쿼리로 모두 가져오는 방법은 없나요?
-
미해결
강의 내용에서 이해안되는 부분 질문드립니다.
package jpabook.jpashop.domain; import jakarta.persistence.*; import jdk.jshell.Snippet; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @Entity @Table(name = "orders") @Getter @Setter public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) private Delivery delivery; //배송정보 private LocalDateTime orderDate; //주문시간 @Enumerated(EnumType.STRING) private OrderStatus status; //주문상태 [ORDER, CANCEL] //이 연관관계 부분입니다. //==연관관계 메서드==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); } //==연관관계 메서드==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); }이 연관관계 메서드 부분이 이해가 안되어서 질문드립니다.setMember 메소드에서 member.getOrders().add(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다. addOrderItem 메소드에서 orderItems.add(orderItem); 와 orderItem.setOrder(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다. setDelivery 메소드에서 delivery.setOrder(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다.
-
미해결
강의 내용 질문드립니다.
package jpabook.jpashop.domain.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.persistence.PersistenceUnit; import jpabook.jpashop.domain.Member; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import java.util.List; @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(Member.class, id); } public List<Member> findAll() { // 회원 목록 조회 return em.createQuery("select m from Member m", Member.class) ry .getResultList(); } public List<Member> findByName(String name) { return em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); } } 위의 코드에서 findByName메소드에서 왜 단건조회가 아닌 리스트 조회를 사용한건가요? 어차피 중복가입은 안되고 이름으로 조회하니까 하나의 결과가 나와야하는거 아닌가요?findByName 메소드에서 setParameter은 왜 있는건가요? 설명부탁드릴게요.
-
미해결실전! Querydsl
세타조인 크로스조인
[질문 내용]세타조인과 크로스조인의 차이가 무엇인가요 ??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
unexpectedRollbackException 에러가 로그에 다르게 남겨져요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 1분 51초 부근에 테스트를 할시에 unexpectedRollbackException이 에러에 남겨지는 것을 확인할 수 있는데, 로그가 저는 다르게 남겨집니다.2024-04-25T15:46:38.354+09:00 DEBUG 5056 --- [springdx] [ main] cResourceLocalTransactionCoordinatorImpl : JDBC transaction marked for rollback-only (exception provided for stack trace)java.lang.Exception: exception just for purpose of providing stack traceat org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:310) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.markRollbackOnly(TransactionImpl.java:203) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImpl.java:224) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] 다른 테스트도 몇개 그렇게 표시 되는데 recoverException_fail test 시에 위와 같이 에러표시가 됩니다.테스트 시 통과는 돼서 UnexpectedRollbackException가 터지는 건 맞는 것 같은데 로그에 에러가 그냥 Exception으로 표시가 되는 것 같아서 구글링해봤는데 문제가 무엇인지 모르겠어서 질문드립니다. https://drive.google.com/file/d/1UzxlCeILcMUkroixUZmV2W49LfPqQAnb/view?usp=sharing
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
벌크 연산 질문
-- 단건 삭제 recruitRepository.delete(recruit); -- 벌크 삭제 recruitSkillRepository.deleteRecruitSkills(recruitId); recruitPositionRepository.deleteRecruitPositions(recruitId);Q1. 단건 삭제 이후에 벌크 연산을 하면 delete가 실행이 안되는데 이유가 뭔가요?제가 생각해본 건 벌크 연산이 실행되면서 영속성 컨텍스트를 초기화하기 때문에 커밋 시점에 이전에 조회한 recruit이 사라졌기 때문이라고 생각하는데 맞을까요??Q2. 벌크 연산을 먼저 수행하는 경우에는 단건 삭제도 정상적으로 처리됩니다. 단, 이때 select recruit 쿼리가 한 번 더 실행되는데 영속성 컨텍스트에 recruit 데이터가 없기 때문에 다시 조회를 해오는걸까요??그럼 이런 경우에는 영속성 컨텍스트를 초기화할 필요가 없을까요?? ps. 현재는 clearAutomatically 속성의 기본값이 false입니다!@Modifying(clearAutomatically = true)위처럼 속성을 true로 설정해야 영속성 컨텍스트가 초기화 되네요 프로젝트 하다가 간만에 막혀서 보러 왔는데 진짜 국밥강의네요..
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
JWT 페이로드 안에 데이터는 어느 것이 포함되어야 하는지 질문드립니다
JWT 페이로드 안에 비밀번호가 저장되어 있는데, 주로 JWT 를 사용한다고 가정하면 어느 데이터를 페이로드 안에 넣어야 하고, 넣지 말아야 할 데이터는 어떤 것들인지 알 수 있을까요?!
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
과제 답안
두번째 과제 풀고 있는데 답이 혹시 어디 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
application.yml 관련 문제
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래와 같이 yml 파일을 설정한다면 어떻게 조치해야하는지 궁금합니다.해당 boot 설치 버전은 gradle과 같습니다.