묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
챕터 3 임의로 URL에 size 값을 변경한 후 다른 페이지로 이동하면 size가 기본값 10으로 돌아갑니다.
안녕하세요 강사님 강의 수강중인 학생입니다. 일단 코드는 강의 내용이나 올려주신 부분하고 다른 점은 없는 것 같은데 원래 이렇게 되는 것인가요? page=1&size=1을 주면 글 하나씩 페이지가 생기는데 그 상태에서 페이지 번호 버튼을 눌러서 다른 페이지로 이동하면 size 파라미터 값이 기본값 10으로 돌아가네요 localhost:3000/todo/list?page=1&size=1인 상태에서 페이지 번호 2번 버튼을 눌러서 이동하면localhost:3000/todo/list?page=2&size=1이렇게 되어야 하는 것 아닌가요?localhost:3000/todo/list?page=2&size=10이렇게 되어버립니다. 코드를 계속 살펴보고 동작 방식을 생각해보니 클라이언트 쪽 코드상에서 page와 size값이 변하는 것을 받아변수에 저장하는 부분은 페이지 번호 버튼을 눌렀을때 useCustomMove의 size 변수와 sizeNum 변수인데 버튼을 통한 변화없이 임의로 URL에서 size를 바꾸고 페이지 번호 버튼을 누르면 저장된 size값은 10 그대로이기 때문에 그렇게 되는 것이 아닐까라는 추측을 해봅니다. size는 변동을 딱히 고려하지 않는 파라미터일 수도 있는데 여러가지로 궁금해져서 이런저런 시도를 해보다보니 의문이 생겼었네요. 실제로 웹개발을 할때 페이지를 나누는 경우 한 페이지의 size값은 변동이 없는 파라미터인가요? 기준을 정하기 위함인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 주인과 변경감지 그리고 cascade
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]강의 14분 26초에서 Order의 cancel() 메서드 내부에 OrderStatus 변경은 변경 감지로 변경되는것을 이해하고 있습니다. 그리고 for loop 내부에서 public void cancel() { if (delivery.getStatus() == COMPLETE) { throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다"); } this.setStatus(CANCEL); for (OrderItem orderItem : orderItems) { orderItem.cancel(); } }orderItem.cancel() 메서드가 호출되고 있습니다. orderItem.cancel()에서는 item 엔티티를 변경하고 있는데 // 비즈니스 로직 public void cancel() { getItem().addStock(count); }궁금한 점은 item 엔티티가 변경이 가능한것은 orderItem이 FK를 갖고 있는 연관관계의 주인이기 때문인가요? 만약 item이 아닌 orderItem의 필드가 변경된다면 변경 감지가 가능할까요? orderItem이 order의 FK를 가지고 있고 반대로 Order는 orderItem의 FK갖지 않기 때문에 읽기만 가능한걸로 알고 있습니다. 질문이 좀 복잡해졌네요. 정리하자면 Q1. order.cancel() 메서드 내부에서 orderItem.cance() 메서드를 호출합니다. 만약 orderItem.cancel()이 orderItem의 필드롤 수정한다면 DB에 반영이 될까요? 지금까지 배운내용이라면 연관관계의 주인이 OrderItem이기 때문에 읽기만 가능하다고 배웠습니다. Q2. 질문 1 상황에서 order 필드의 OrderItems에 cascade all이 붙어있다면 order에서 OrderItem을 수정이 가능할까요? Q3. 만약 질문 1에서 읽기만 가능한게 맞다면 Order.cancel()이 orderItem.cancel()을 호출하고 차례로 item 엔티티를 수정하는 경우order -> orderItem은 읽기만 가능하지만 orderItem -> item은 수정이 가능한 연관관계의 주인이기때문에 타고타고 넘어가서 수정이 가능한걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향 vs 양방향 성능 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]양방향 매핑을 할 때와 단방향 매핑을 할 때의 성능 차이가 있나요?그러니까, 단방향 매핑을 한 후, 각 엔티티의 레포지토리를 통해 명시적으로 조회하는 것과, 양방향 매핑을 한 후, get을 사용하여 조회하는 상황의 성능 차이에 대해 궁금합니다. 지연로딩을 사용하는 경우, 결국 나가는 쿼리 수는 같지 않나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
querydsl 수업 중 질문드립니다
spring 버전이 달라 구글링 해서 버전에 맞는 gradle 설정을 끝내고 측면의 gradle 탭에서 build를 눌러 q클래스를 생성시켰더니 test 클래스에서 다음과 같은 오류가 났고 해당 오류부분을 주석처리하여 실행시켰더니 새로 만든 querydsl 메서드를 사용하는 주문내역 페이지(/orders)가 오류가 났는데 구글링을 아무리 해도 해결하는 방법을 모르겠습니다 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
중복_회원_예외() 코드 작성 질문입니다!
[질문 내용]지금까지 영한님께서 작성하신 테스트 코드 들은 Assertions.... 를 통해서 테스트하셔서 감을 익히고, 저도 테스트 케이스 작성 영상 보기 전에 미리 작성해보고 비교해보는 식으로 강의를 수강 중입니다.처음 작성한 코드입니다.@Test public void 중복_회원_예외() throws Exception { //given Member member1 = new Member(); member1.setName("Lim"); Member member2 = new Member(); member2.setName("Lim"); //when Long savedId1 = memberService.join(member1); //then Assertions.assertThrows(IllegalStateException.class, ()-> memberService.join(member2)); }위 처럼 Assertions.assertThrows를 사용하지 않으신 이유는 fail()이란 메서드의 존재와 @Test에 expected 옵션의 사용법을 알려주고자 하신 목적이신가요??어떤 테스트 케이스가 더 좋은 건가요? 그 이유도 궁금합니다!!!MemberService에 이미 명시적으로 IllegalStateException를 던져 놓았기에 더 짧은 타이핑으로 작성할 수 있는 assertThrows가 적합하다고 생각이 드는데, 강사님의 생각이 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문 조회 V4: JPA에서 DTO 직접 조회
주문 조회 V4: JPA에서 DTO 직접 조회 강의에서 OrderQueryRepository를 스프링데이터JPA를 이용해 변경하려하는데 잘 되지않아서 질문하게 되었습니다.(변수명이 바뀐 것은 제가 강의를 보면서 좀 수정해가며 작성하였습니다.)package jaein.crudpractice.repository.order.query; import jaein.crudpractice.domain.Order; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface OrderQueryRepository extends JpaRepository<Order, Long> { // @Query("select o from Order o" + // " join fetch o.student s" + // " join fetch o.loan l") // List<OrderQueryDto> findOrderQueryDtos(); // @Query("select o.id as orderId, s.name as name, o.loanDate, o.returnDate, o.status, " + // "oi.id as itemId, i.name as itemName " + // "from Order o " + // "join o.student s " + // "join o.loan l " + // "join OrderItem oi on oi.order.id = o.id " + // "join oi.item i") // List<OrderQueryDto> findOrderQueryDtos(Pageable pageable); @Query("select o.id, s.name, o.loanDate, o.returnDate, o.status " + "from Order o " + "join fetch o.student s " + "join fetch o.loan l " + "join fetch OrderItem oi on oi.order.id = o.id") List<OrderQueryDto> findOrderQueryDtos(Pageable pageable); // @Query("select oi.order.id, i.name, oi.orderPrice, oi.count " + // "from OrderItem oi join oi.item i where oi.order.id = :orderId") // List<OrderItemQueryDto> findOrderItems(Long orderId); @Query("select oi from OrderItem oi" + " join oi.item i where oi.order.id = :orderId") List<OrderItemQueryDto> findOrderItems(@Param("orderId") Long orderId); }package jaein.crudpractice.repository.order.query; import jaein.crudpractice.domain.OrderStatus; import lombok.Data; import java.util.Date; import java.util.List; @Data public class OrderQueryDto { private Long orderId; private String name; private Date loanDate; private Date returnDate; private OrderStatus status; private List<OrderItemQueryDto> orderItems; public OrderQueryDto(Long orderId, String name, Date loanDate, Date returnDate, OrderStatus status, List<OrderItemQueryDto> orderItems) { this.orderId = orderId; this.name = name; this.loanDate = loanDate; this.returnDate = returnDate; this.status = status; this.orderItems = orderItems; } }package jaein.crudpractice.repository.order.query; import lombok.Data; @Data public class OrderItemQueryDto { private Long orderId; private String itemName; private int count; public OrderItemQueryDto(Long orderId, String itemName, int count) { this.orderId = orderId; this.itemName = itemName; this.count = count; } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
객체지향 쿼리 언어1 - 기본 문법 > 소개 7:28 쿼리가 안나가요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래 소스로 실행했는데 select 쿼리가 안나갑니다 select문에 where절 빼고 실행하면 select되긴 하는데 이유가 뭔지 모르겠어요 package jpabook.jpashop; import jpabook.jpashop.domain.Book; import jpabook.jpashop.domain.Member; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.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 { List<Member> result = em.createQuery( "select m from Member m where m.username like '%kim%'" , Member.class ).getResultList(); for (Member member : result) { System.out.println("member = " + member); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
validateDuplicateMember 메서드에서 Unique제약 조건 관련 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여러 was가 띄워있는 웹에서 0.0000...01초까지 동일한 시간에 join()메서드가 동시에 호출되어 validateDuplicateMember()메서드 또한 동시에 호출되고 findByName()을 통한 조회가 동시에 호출될 경우에 두 클라이언트에 대한 요청에 대해서 모두 isEmpty가 true가 되어 검증 로직을 통과하게 되어 최후의 수단으로 DB단에서 name 필드를 Unique 제약조건을 두어 유일성을 가지게 하는 것은 이해하였습니다.그렇다면, Unique제약조건까지 설정한 이후에 두 클라이언트가 동시에 요청을 했을 때,1. 둘 다 DB에 insertion 되지 못하고 에러가 나나요?2. 둘 중 하나가 삽입이 되고 나머지 하나는 삽입 되지 못하나요? 그렇다면, 어떤 기준으로 둘 중 하나가 선택되나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바17 기본설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 자바 17로 학습하고 있는데 기본설정에 javax가 포함되어있어 질문 드립니다자바17이상은 jakarta를 써야한다고 알고있는데 javax를 써도 무방한건가요 ??답변 부탁드립니다 !!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence 찾을 수 없다고합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이클립스로 구동시키려 하고 있습니다. 다름이 아니라 분명 src/main/resources/META-INF/persistence.xml 완벽하게 경로 넣었다고 생각하는데 사진과 같은 Could not find ~에러가 출력됩니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
MyBatis 적용시 오류
질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]저와 같은 내용의 질문이 있어서 참고해 봤는데도 해결이 안되어 질문드립니다.<MyBatis 적용2 - 설정과 실행 부분 테스트 오류>MyBatis 적용 후 테스트코드 돌려보았는데, Bean설정과 관련된 오류가 나타납니다. 패키지 Path도 확인해보고, 교재와 비교도 해보았는데 어떤 문제인지 잘 모르겠습니다ㅠㅠ테스트 돌렸을때 아래와 같은 오류가 납니다.Parameter 0 of constructor in hello.itemservice.config.MyBatisConfig required a bean of type 'hello.itemservice.repository.mybatis.ItemMapper' that could not be found.Action:Consider defining a bean of type 'hello.itemservice.repository.mybatis.ItemMapper' in your configuration. 구글드라이브 링크 첨부드립니다!https://drive.google.com/file/d/1U8YIKxbUDMvnv2ZaWjzB5gUTgqcwTZ-t/view?usp=sharing
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@EqualsAndHashCode
주문 조회 V4: JPA에서 DTO 직접 조회 제공해주신 피피티에서는 @EqualsAndHashCode 를 사용하는데 강의에서는 제가 못 본것 같습니다.. @EqualsAndHashCode 를 사용하신 이유가 있을까요? 강의 중 9분 34초 에서 본 OrderQueryDto는 @Data만을 사용했습니다.
-
미해결실전! Querydsl
쿼리메서드에서 And Or 조건 혼용시 괄호를 표현하는 방법이 있나요?
안녕하세요.JPA 쿼리메서드를 사용하면서 궁금한점이 있어 질문 드립니다.SELECT Col_A, Col_B, Col_C, Col_D FROM TBL_AWHERE Col_A = 'aaa' and Col_B = 'bbb' and (Col_C = 'ccc' or Col_D = 'ddd')일반 쿼리로 위의 WHERE 문의 조건을 쿼리메서드로 작성하고자 하는데 내공이 부족하여 잘 안됩니다.findByCol_AAndCol_BAndCol_COrCol_D(String A, String B, String C, String D)이렇게 작성할 경우WHERE Col_A = 'aaa' and Col_B = 'bbb' and Col_C = 'ccc' or Col_D = 'ddd'이 같이 괄호가 없는 쿼리문으로 작성이 되는거 같습니다.쿼리메서드로 and와 or 조건의 괄호를 묶는 방법이 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 연관관계 메서드 관련해서 질문 있습니다.<엔티티 설계시 주의점> 26:30에서 public void addchildCategory(Category child){ this.child.add(child); child.setParent(this); }인 것을 확인할 수 있습니다.혹시 아래와 같은 방법은 하면 안되는지 궁금하여 질문드립니다. public void addchildCategory(Category child){ this.child.add(child); this.parent = child; }
-
해결됨Practical Testing: 실용적인 테스트 가이드
ServiceRequestDto 대신 풀어서 넘기는건 어떻게 생각하시나요?
Controller단의 Dto를 Service 전용 Dto로 변환해서 넘기는 방법을 알려주셨는데Controller단에서 받은 Dto의 컬럼들을 모두 풀어서 Service단 으로 넘겨주는 방법은 어떻게 생각하시는지 궁금합니다.이렇게 하면 순수한 자바코드로 Service단 코드를 작성할 수 있을 거라고 생각하는데 강사님의 생각 알려주시면 감사하겠습니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
Spring Rest Docs 강의 질문이 있습니다.
0:59:00 전 내용입니다. 명세를 정한다컨트롤러 @Valid 검증을 작성한다.RestDocs 를 작성한다가짜 데이터를 넣는다.배포한다.그 뒤 서비스와 리포지토리를 작성한다. 라고 정리를 해봤습니다. 그런데 여기서 궁금한게 4번인데요가짜 데이터를 넣는다는 뜻을 잘 모르겠습니다. 테스트 환경에서는 자유롭게 docs/index.html 로 접근을 하고 라이브 환경에서는 해당 bootJar를 구문을 제거하고 배포하시는 건가요?
-
미해결실전! 스프링 데이터 JPA
org.springframework.data.repository.Repository를 구현한 클래스??
안녕하세요 강사님! 강의 정말 잘 듣고 있습니다.혹시 강의 자료가 잘못된 건지 아니면 제가 이해를 잘못한 건지 잘 모르겠어서 질문 올립니다.강의 자료의 해당 강의 부분을 보면 org.springframework.data.repository.Repository 를 구현한 클래스는 스캔 대상라고 되어있는데, 제가 이해한 바로는 이 부분이org.springframework.data.jpa.repository.JpaRepository 를 상속받은 인터페이스는 스캔 대상이렇게 수정되어야 할 것 같은데 맞을까요..??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입 비교법 equals()
강의 "값타입 비교" 에서 equals를 오버라이드해서 쓰셨는데 저는 항상 그냥 특정 스트링이나 객체가 같은지 비교할때 equals썼었거든요 그렇게 하면 안됐던건가요?? 어떤경우든 항상 객체에 맞게 오버라이드해야하나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
이너클래스로 새로운 엔티티! 와 임베디드 차이?
이너클래스로 새로운 엔티티만들어서 엔티티에 넣어주는것과 와 임베디드를 엔티티에 넣어주는것의 차이?가 궁금합니다엔티티만들때 엔티티안에 임베디드타입으로 넣어주셨는데이부분은 이너클래스나 다른클래스로 따로 엔티티를 만들어 그부분에 넣어줘도 되는것 아닌가요? 둘의 차이가 무엇인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 매핑, 매니투원 두개만 지연로딩으로 바꿔주면 되나요?
만일 실무에서 개발을 하게되면 일대일 매핑, 매니투원 두개만 즉시로딩이니 이 두개만 항상 지연로딩으로 바꿔주면 되나요??