질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 선생님 질문이 있습니다. 강의 22:00 쯤 변경 감지 듣다가 궁금증이 생겼습니다. 질문은 영속 컨텍스트에 넣지 않은 상태로 DB에서 바로 가져올 땐 커밋 시점 보다 먼저 쿼리가 발생하나요? package hellojpa; import jakarta.persistence.*; import java.util.List; 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 { Member member = em.find(Member.class, 450L); member.setName("XXXX"); // em.persist(member); System.out.println("=================="); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } } 출력결과 Hibernate: select m1_ 0.id , m1_ 0.name from Member m1_0 where m1_ 0.id =? ================== Hibernate: /* update for hellojpa.Member */update Member set name=? where id=? 예상 출력 결과는 === select ... update ... 이렇게 나올 줄 알았는데요 왜 이렇게 나오지 않을까요?
강의수강중에 Pageable import 관련하여 아래와 같은 Pageable을 선택하니까 오류가 나오더라구요...type unmatch 형태 //import java.awt.print.Pageable; springboot를 사용할 때는 아래와 같은 org.springframework의 형태가 import 우선순위가 되는것이 맞는건가요? import org.springframework.data.domain.Pageable;
안녕하세요 validation 강의를 듣고 질문 드립니다. 강의 속에서 설명하신대로 하고 postman에서 실행을 하려고 보니 동작은 하는데 비밀번호 조건이 충족되지 않아도 defaultMessage가 뜨지않고 회원가입이 완료되었다는 창이 뜹니다ㅜㅜ @Valid 어노테이션 사용도 다 했는데 뭐가 문제인걸까요?
private List<Product> findProductsBy(List<String> productNumbers) { return productRepository.findAllByProductNumberIn(productNumbers); } 그냥 이렇게 바로 리턴 해도 되지 않나요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. IDENTITY 전략일 때, 모아서 INSERT하는 게 불가능하다라고 말씀하셨는데, 이게 PK가 없는 상황에서만 불가능하고 다른 상황(pk가 있을 때 insert 쿼리, select 쿼리 등등)에서는 원래처럼 모아서 커밋 직전에 쿼리가 날라가는건지, 아니면 정말로 IDENTITY 전략일 땐, 모든 JPA가 생성하는 쿼리가 커밋 직전이 아닌 그 때 그 때 나가는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @Column(unique = true, length = 10) private String name 위와같이 코드를 작성할 때, 만약 DB 생성을 자동 기능으로 하지 않고, DB에 따로 테이블 생성을 진행했다면, 위의 코드가 있어도 반영이 안된다는 의미인거죠? 즉, DB에 따로 테이블을 만들 때 name 필드에 unique 제약 조건을 걸지 않고, varchar(255) 이렇게 했다면, 아무리 @Column(unique = true, length = 10) 이렇게 한다고 해도 실제 DB에 반영이 되는 건 아니고 오직 DDL 생성할 때만 반영된다는 거죠?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Book setName, setPrice, setStockQuantity 할 때 오류가 뜨는데 Item은 추상클래스에 Book이 상속을 받으니까 Book에만 setter를 설정하면 되는 거 아닌가요? item에 setter를 적용해야 오류가 풀리는데 왜 이러는지 궁금합니다. Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10);
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 만약 JPA에서 batch_size 기능을 사용하지 않는다면, 그리고 영속성 컨텍스트의 쓰기 지연 SQL 저장소에 쿼리 2개가 모여있는 상태라면, 커밋되기 전에 각각 다른 네트워크로 즉, 애플리케이션에서 DB로 요청이 2번 진행되서 쿼리가 날라가는 건가요? 그래서 batch_size 옵션으로 = 2가 되면 하나의 네트워크로 2개의 쿼리가 동시에 반영이 되는 건가요? 그래서 batch_size 옵션을 사용하면 API 속도 개선에 사용할 수 있는건가요?? 근데, 그렇다면 사실 무조건 batch_size 옵션을 최대한 크게 설정하면 좋은 거 아닌가요? 이것도 한꺼번에 너무 많은 쿼리들을 보내면 또 문제가 있으려나요??
안녕하세요 선생님. 좋은 강의를 정말 잘 듣고 있습니다ㅎㅎ [네비게이션관련 커스텀 훅] 강의에서 궁금한게 생겼는데요~ 쿼리 스트링에 page와 size가 있는데, moveToList에 파라미터로 page와 size를 전달해서 처리해야 하는 이유가 무엇인지 알 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] PC에서 소리는 나오는데 검은화면으로 나옵니다.
어디를 수정해야 할까요? 지금 계속 다시 해보고 있는데 해결이 되지 않습니다ㅠ 앞서 이렇게 했었는데 해결되지 않아 다시 해보고있습니다..! tailwind.config.js 의 content에 이렇게 입력하는게 맞나요?? index.css에 이렇게 오류가 떠서요 ㅠㅠ -> 우측하단 언어모드를 tailwindCSS로 바꾸면 밑줄은 사라지는데 npm start 실행시 이렇게 뜹니다..!
두 가지 궁금증이 생겨 질문드립니다!! Mock과 Stub에서 혼란을 느끼는지? Mock & Stub 에 대한 이해를 하였는지? // OrderTest.java import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class OrderTest { @Test void 주문_총_금액을_계산한다() { Product apple = new Product("사과", 1000); Product banana = new Product("바나나", 2000); Order order = new Order(); order.addProduct(apple); order.addProduct(banana); assertEquals(3000, order.totalPrice()); } } // OrderTest.java import org.junit.jupiter.api.Test; import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; public class OrderTest { @Test void 주문_총_금액을_계산한다_Product_Mock_사용() { Product apple = mock(Product.class); Product banana = mock(Product.class); when(apple.getPrice()).thenReturn(1000); when(banana.getPrice()).thenReturn(2000); Order order = new Order(); order.addProduct(apple); order.addProduct(banana); assertEquals(3000, order.totalPrice()); } } 두 테스트에서 생각을 정리하다 보니 저는 마틴 파울러의 test double의 stub 과 mock 에 대한 개념보다 TTD or BDD 스타일의 테스트 코드를 작성하다가 테스트의 편의성을 위해 Mokito을 통한 Mock 테스트 를 먼저 접하게 된 후 마틴 파울러의 test double의 개념을 접하게 되었습니다. 마틴 파울러의 Mock 과 Stub 테스트에서 혼란스러운 이유 테스트 코드를 작성하다보면 자연스럽게 then에 해당하는 부분 은 대부분 상태(값)을 검증하는 테스트 를 위주로 테스트 코드를 작성하게 되는거 같습니다. 주문_총_금액을_계산한다() -> 단위 테스트로 상태(값)을 검증 주문_총_금액을_계산한다_Product_Mock_사용() -> 나는 Mockito의 mock 테스트 로 상태(값)을 검증 test double stub -> 상태(값) 검증 mock -> 행동 검증 위 와 같이 상태(값) 을 검증하는 테스트를 하다보니 stub 테스트 와 Mockito 의 mock을 사용한 테스트 을 동일시 보게 된거같습니다. Mockito의 mock 테스트 의 개념과 test double의 mock 테스트 가 동일한 개념이 아니다. Mokito의 mock을 사용하여 상태(값)을 검증하는 테스트를 하다보니 test double의 stub 테스트 를 Mock 테스트 하였다라고 생각한게 아닌가? 테스트 케이스 stub 과 mock 테스트 구별하기 주문_총_금액을_계산한다() 해당 테스트는 실제 객체 를 이용하여 상태(값)에 대한 검증 을 한다. -> Stub 테스트 주문_총_금액을_계산한다_Product_Mock_사용() 해당 테스트는 Product 를 Mock 하여, order의 totalPrice 을 검증 한다. -> Mock?, Stub? 주문_총_금액을_계산한다_Product_Mock_사용()를 어떻게 바라 볼 것인가? test double의 mock 테스트를 준비 하였지만 검증 부분을 잘못하였다. test double의 stub 테스트를 실제 객체가아닌 가짜객체로 테스트 하였다. @Test void 주문_총_금액을_계산한다_Product_Mock_사용() { // given Product apple = mock(Product.class); Product banana = mock(Product.class); when(apple.getPrice()).thenReturn(1000); when(banana.getPrice()).thenReturn(2000); Order order = new Order(); order.addProduct(apple); order.addProduct(banana); // when int total = order.totalPrice(); // then verify(apple).getPrice(); // apple.getPrice()가 호출되었는지 검증 verify(banana).getPrice(); // banana.getPrice()가 호출되었는지 검증 } 주문_총_금액을_계산한다_Product_Mock_사용()를 위와 같이 수정한다면 test double에서 이야기하는 mock 테스트이지 않을까 생각이 듭니다. 물론 모든 테스트를 test double의 Mock, Stub 테스트라는 틀에 맞춰 작성해한다는 아니라고 생각이 듭니다. 주문_총_금액을_계산한다_Product_Mock_사용()가 마틴 파울러가 이야기하는 test double의 개념 에서 어떻게 생각해 볼 것인가? 에대한 궁금증 우빈님의 생각이 궁금 하기도 합니다. 제가 잘 이해를 하였는지 확인이 필요하여 질문드립니다.