30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
프로젝트에 대해서
항상 영한님 강의를 들으며 공부하는 학생입니다. 좋은 강의를 제공해주셔서 감사합니다. 질문이 하나 있습니다. 강의와 관련된 질문은 아닙니다. 공부를 하다가 문득 저도 작은 프로젝트를 하나 만들어 보고 싶다는 생각을 하게 되었습니다. 그래서 영한님의 로드맵을 어디까지 수강하고 프로젝트를 시작하면 좋을지 기본은 알고 프로젝트를 진행해야 한다고 생각하는데 어디까지가 기본인지 감이 안잡힙니다. 그래서 혹시나 어디까지 강의를 들었다면 부족해도 프로젝트를 진행해도 되는지와 처음 연습 프로젝트는 어떤걸 만들어 보는것이 좋은지 알려주셨으면 좋겠습니다. 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@GetMapping("/api/v1/members") 부분이 이해가가지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 다름이 아니라@GetMapping("/api/v1/members") public List<Member> membersV1() { return memberService.findMembers(); } 관련 포스트맨으로 저도 강사님처럼 테스트하려고 하니오류가 발생햇습니다.HttpMessageNotWritableException에러가 발생했고 강사님이랑 코드는 똑같은데 왜 오류가 나는지 모르겟습니다. 제가 추측하기로는 멤버의 전체를 가져오는데 xtoMany 전략이 기본 fetch가lazy를 사용하기 때문에 멤버를 조회 할 때 오더에내용은 가져오지 않앗고 JSON 으로 넘기는 과정에서member가 가지고 있는 orders 에 값을 가져오지 못하여 나는 오류인거같은데 맞는지 궁금합니다. 실제로 @OneToMany(mappedBy = "member", fetch = FetchType.EAGER) private List<Order> orders = new ArrayList<>();이렇게 Member 엔티티의 페치방식을 수정해주니까 오류없이 강사님과 같은 화면을 출력 할 수 있었습니다. 근데 이상하게 해당 fetch 속성을 변경하지 않고public List<Member> findAll() { return em.createQuery("select m from Member as m join fetch m.orders", Member.class) .getResultList(); } JPQL 을 이런식으로 변경했더니 또 아무것도 못가져오는 상태가 되었습니다. 저는 위에 fetch 속성을 변경하거나해당 jpql 로 저렇게 가져오는게 동일하다고 생각햇습니다.. 그리고 추가적으로 강산님은 Member 엔티티 order에 fetch 속성을 변경하지도 않으셧는데 아무런 오류 없이 잘 가져와지는것이 이해가 가지 않습니다. 왜 강사님은 페치전략 변경없이 잘 가져와 지는데저는 페치전략을 변경해야 강사님처럼 가져와지는걸까요??
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto의 위치2
강사님이 커뮤니티게시판에 dto관련 위치에 대해 쓰신 글을 공부했습니다. 결론적으로는 dto를 사용하는 위치에 두는 것이 맞다라고 이해를 했습니다.그런데 이번 강의 rest api를 구현하시면서 dto를 컨트롤러에 내부클래스에 두었습니다.이번 강의에서 사용하는 dto는 화면에 의존적이기때문에 저도 컨트롤러에 두는 것이 맞다고 생각합니다.여기서 질문입니다. 여기서 강사님께서 엔티티 조회방식으로 우선 접근을 하라고 권장하셨습니다.그런데 강의대로 한다면 컨트롤러에 dto관련 내부 클래스가 너무 많아질텐데그럴 경우에는 controller에 따로 dto페키지를 만드는 것이 좋은 선택인지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto의 위치
엔티티를 조회해서 dto로 변환할 시에 강사님은 controller에 내부 클래스 방식을 이용하셨습니다. 그 이유가 어차피 dto가 화면에 의존적이기 때문에 controller에 내부클래스 방식으로 하신건지아니면원래는 따로 dto페키지를 만들어서 사용하는 게 맞으나 수업을 위해서 그러신건지 궁금합니다.결론적으로는 dto의 위치를 어떻게 가져가는 것이 맞는 지 궁금합니다.controller의 내부 클래스dto페키지생성repository그 외4가지 중 어디에 두어야 할 지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Data의 역할
왜 Dto에 @Data가 빠지면이런 오류가 나는 지 궁금합니다.강의에서는 getter가 없어서 오류가 났다고 배웠습니다.property가 없다고 오류가 난다고 배웠는데 왜 getter가 있어야 하는 지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api에 대해서
api라는 개념에 대해서 햇갈려서 질문을 남깁니다. 이 컨트롤러를 여기서는 회원수정api라고 하고postman에 json으로 작성한 것을 api스펙이라고 하는 건가요??
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
V1
강사님 코드에서는 orderRepository.findAllByString();으로하시는데 pdf파일에는 findAll(); 되어있습니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
8분10초쯤
jpql짤때 OrderQueryDto파라미터로 d.address 이렇게 주면jpa가 알아서 임베디드 타입의 필드를 뒤져서 반환해주는건가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
onetomany 관계인 엔티티의 속성을 필터링에 사용하는것에 대해서
안녕하세요 강사님 강사님의 강의 잘듣고있습니다. 강사님의 강의를 듣고 프로젝트 진행중 고민인 부분이 있어 질문남깁니다!전체는 아니지 대략적인 erd 부분입니다.게시물에 달려있는 태그, 게시물 제목 등으로 필터링 하는 상황입니다. 또한 "게시물" 엔티티와 "게시물_태그" 엔티티가 양방향으로 되어있습니다.궁금한점이 게시물에 있는 태그를 조건으로 필터링할때 아래 두방식중 어떠한 방식이 적합합니까? 아니면 더좋은 방법이 있으시다면 어떤것이 있는지 여쭈어봐도 되나요?!게시물 테이블에 태그를 제외한 나머지 조건으로 필터링한 후 결과 게시물들의 "게시물_태그" 프록시 객체를 초기화하면서 태그 조건에 만족하는 게시물을 필터링하는 방법"게시물_태그" 테이블에서 태그조건을 가진 게시물들을 먼저 찾은후(찾은후 group등을 이용) 나머지 조건사용해서 필터링하기읽어주셔서 감사합니다!!!
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
12분09초
return new Result(collect);Result<T> 리절트에 <>안해주고 위에처럼 그냥 써도 상관없나요?어느 블로그에서 "간혹가다 책에서 Object형을 암시적으로 받는다고 적혀있는 경우가 있는데 단언컨데 Object형을 받지 않습니다."라고 나와있는데 굳이 이렇게 코드를 짠 이유가 뭘까요??
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA LOCK 구현 질문 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강사님 동시간대 몇시 몇분 몇초대 대에 동일한 json 메세지 api 호출 받는경우이중으로 오더번호가 채번되는 문제가 있습니다(해당 오더요청 json 메세지에는 오더마스터 + 오더디테일 항목으로 구성이 되어 있고 오더요청 list 가 배열로 수백, 천건이 넘어 갈수 가 있습니다 )동시간대 몇시 몇분 몇초대 대에같은 오더 요청 json 메세지 받고 여러 쓰레드 처리시 락을 걸고 처리하면서 같은 요청 메세지는 발라 주어야 합니다강사님 책중에 낙관적락, 비관적락 부분을 참고해서프로그램에 반영해서 테스트해보니 많이 헤멨는데요결국은 jpa 비관적 락 + db 트리거 동시 적용해서 해결했는데요 1.비지니스 로직이나 업무요건에 따라 다르겠지만 강사님이 이라면 이런 케이스에는 어떤식으로 처리하실까요? 비관적락, 낙관적락? 2.강사님이 경험하신 사례에 jpa 락(낙관,비관) + db 트리거 를 같이 사용하신 적도 있나요? (제가 구현한 방법이 최선인가 의문의 들어서 질문 드립니다 )
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA 여러 테이블 Join
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요? 강의 수강 잘 하고 있습니다.원하는 내용 : 총 3개의 테이블에서의 JOIN 쿼리를 사용해야하는데, JPA 에서도 이부분이 가능한지 문의드립니다. 쿼리 : select ufile.UPLOAD_DATE, ufile.ORIGIN_FILE_NAME, ufile.STATUS, ufile.DESC, ufile.AVAILABLE_COUNT, ufile.DOWN_COUNT, master.FID, DATEADD('DAY', ?, ufile.UPLOAD_DATE ) AS validDatefrom UPLOAD_FILE ufileleft join UPLOAD_INFO info on ufile.UPLOAD_INFO_ID = info.IDleft join FILE_MASTER master on ufile.FID = master.FID where info.USERID = ? and ufile.UPLOAD_DATE > DATEADD('DAY',-?, CURRENT_DATE) JPA 로 테이블은 각각 객체로 만들었습니다.모든 테이블의 관계를 생성한 것은 아니지만 위 쿼리의 테이블은 관계 명시를 해놨습니다.? 에 해당 하는 것은 하나는 입력값, 다른 하나는 특정 테이블의 값을 가져오는 것이서 호출 시점에 동적으로 변경됩니다. JPA 에서 JOIN 하는 부분에 대한 예제가 있을까요?인프런 이외 구글링을 해도 정확히 원하는 내용이 없어 문의드립니다. 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
강의와 관련하여 궁금한게있습니다~!
엔티티로 직접 요청을 처리하지말고 별도의 dto를 만들어서 요청을 처리하는게 좋다고말씀해주셨는데! 실무의 경우 api별로 dto를 만들때 내부클래스로 선언해서 사용할까요? 아님 패키지에 따로 dto를 만들어서사용할까요!!그리고 추가적으로 혹시 선생님 spring mvc강좌 restapi관련된 강좌가있을까요!?
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
강제초기화 후, hibernate5Module 미주입시 오류에 대해
@SpringBootApplication public class JpashopApplication { public static void main(String[] args) { SpringApplication.run(JpashopApplication.class, args); } //@Bean // Hibernate5Module hibernate5Module() { // Hibernate5Module hibernate5Module = new Hibernate5Module(); // return hibernate5Module; // } }hibernate5Module을 의존성 추가하지 않고강제초기화를 해보았는데 오류가 나더라구요.강제 초기화를 했고 sql문은 나갔을텐데 오류가 나는게 의아하더라구요.@GetMapping("/api/v1/simple-orders") public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName();//강제 초기화 order.getDelivery().getAddress(); } return all; }디버깅을 해보았는데Member와 Delivery의 sql이 나가고return에서 오류가 나더라구요.order->프록시->영속성컨택스트로 이어지고강제초기화를 해서 Member와 Delivery는 영속성 컨택스트에 담겼지만return에서 Order의 Member와 Delivery에는 프록시값이 가리키는 영속성컨택스트가 아닌, 프록시까지만 json으로 변환하기때문에 오류가 난다고 생각하는게 맞는 걸까요?그리고 그 프록시를 영속성컨택스트로 바꿔서 변환해주는게 hibernate5Module의 역할이라고 보면 될까요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문 조회 v2에서 에러가 발생 & 궁금한 점이 있습니다
안녕하세요.주문 조회 V2("api/v2/orders")에서 코드를 작성하고 포스트맨을 실행시켰는데 에러가 발생합니다.datatype jackson hibernate5 모듈은 설치하지 않았습니다.@Entity @Table(name = "orders") // 관례 @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) 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(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; private LocalDateTime orderDate; // 주문 시간 @Enumerated(EnumType.STRING) private OrderStatus status; // 주문 상태 [ORDER, CANCEL] } @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class OrderItem { @Id @GeneratedValue @Column(name = "order_item_id") private Long id; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id") private Order order; private int OrderPrice; // 주문 가격 private int count; // 주문 수량 } @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter @Setter public class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; @ManyToMany(mappedBy = "items") private List<Category> categories = new ArrayList<>(); } @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; @GetMapping("/api/v2/orders") public List<OrderDto> orderV2() { List<Order> orders = orderRepository.findAllByString(new OrderSearch()); List<OrderDto> collect = orders.stream() .map(o -> new OrderDto(o)) .collect(Collectors.toList()); return collect; } @Data static class OrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List<OrderItem> orderItems; public OrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); address = order.getDelivery().getAddress(); // order.getOrderItems().stream().forEach(o -> o.getItem().getName()); // 프록시 초기화 orderItems = order.getOrderItems(); } } } 포스트맨 실행시, 결과가 아래처럼 출력됩니다.[ { "orderId": 4, "name": "userA", "orderDate": "2022-09-19T19:28:18.294267", "orderStatus": "ORDER", "address": { "city": "서울", "street": "1", "zipcode": "1111" }, "orderItems": [ { "id": 6, "count": 1, "orderPrice": 10000, "totalPrice": 10000 }, { "id": 7, "count": 2, "orderPrice": 20000, "totalPrice": 40000 } ] }, { "orderId": 11, "name": "userB", "orderDate": "2022-09-19T19:28:18.333162", "orderStatus": "ORDER", "address": { "city": "부산", "street": "2", "zipcode": "2222" }, "orderItems": [ { "id": 13, "count": 3, "orderPrice": 20000, "totalPrice": 60000 }, { "id": 14, "count": 4, "orderPrice": 40000, "totalPrice": 160000 } ] } order.getOrderItems().stream().forEach(o -> o.getItem().getName());를 프록시를 초기화시키는 부분이라고 이해했는데, 해당 부분을 주석처리하거나 안하거나 결과가 똑같이 출력됩니다. 이유를 모르겠는데, 어디선가 프록시가 초기화가 된걸까요..?orderItem 값 자체가 아니라 프록시 객체를 초기화하는게 맞..죠..ㅠㅠ?!그리고 강의와 다르게 item에 대한 정보가 출력되지 않는데, 혹시 datatype jackson hibernate5 모듈을 설치하지 않았기 때문에 발생하는 문제인가요? ('간단한 주문 조회 V2'에서는 강의와 똑같이 출력되었어서 문제가 뭔지 모르겠습니다.) 또, OrderItem.item에 @JsonIgnore을 추가하지 않을 때 아래와 같은 에러가 발생하는데, 지연 로딩에 의한 에러가 맞나요? (OrderItem과 Item 엔티티가 양방향 매핑이 아닌데.. '간단한 주문조회 V1' 강의에서 양방향 매핑에서 발생했던 에러 메세지와 비슷해보여서 질문드리게 되었습니다.)지연 로딩이 맞다면, order.getOrderItems().stream().forEach(o -> o.getItem().getName());에서 o.getItem().getName()에 의해 item에 대한 쿼리를 날리게 되어 이 부분이 해결되지 않나 싶은데 제가 틀리게 이해한건가요ㅠㅠ?com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->jpabook.jpashop.API.OrderApiController$OrderDto["orderItems"]->org.hibernate.collection.internal.PersistentBag[0]->jpabook.jpashop.Domain.OrderItem["item"]->jpabook.jpashop.Domain.Item.Item$HibernateProxy$Hp0g9cdN["hibernateLazyInitializer"])at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.3.jar:2.13.3]에러를 해결할 수 있는 방법도 궁금합니다. OrderDto에서 items를 따로 추가해 order.getOrderItems().getItem()들을 출력해보려고 했는데 방법이 틀린건가요? (위에 forEach문을 보면 해당 방법을 통한 접근이 가능한 것 같아서 시도해봤습니다..!)
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
BatchSize 조회 관련건
안녕하세요. 먼저 항상 좋은 강의 감사드립니다.realworld라는 프로젝트를 JPA로 구현하는 도중에 궁금한 점이 생겨서 질문 드립니다.@OneToMany List<ArticleTagEntity> articleTagsArticleEntity는 위의 ArticleTagEntity를 갖고 있습니다. (Lazy 설정 되어있습니다.) 저는 application.yml에 default_batch_fetch_size를 500으로 설정해놓고... ArticleEntity 조회 로직 ... List<ArticleTagEntity> articleTagList = articleEntity.getArticleTags(); articleTagList.forEach(articleTag -> ....);다음 부분에서 WHERE IN 절 쿼리가 나가는데요, ArticleEntity 조회 로직에서 조회된 ArticleEntity의 개수는 총 12개입니다. 그렇다면 batch_size를 500으로 설정해놨으니 WHERE IN 절에서 article_id가 12개가 모두 바인딩되서 나가는 것을 기대했는데 실제로는 그렇지 않고 10개 나간뒤 반복문을 돌다가 2개가 다시 나가는 쿼리가 발생했습니다.Hibernate: select articletag0_.article_id as article_4_1_1_, articletag0_.uid as uid1_1_1_, articletag0_.uid as uid1_1_0_, articletag0_.created_at as created_2_1_0_, articletag0_.updated_at as updated_3_1_0_, articletag0_.article_id as article_4_1_0_, articletag0_.tag_id as tag_id5_1_0_ from article_tag articletag0_ where articletag0_.article_id in ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) .... .... ... for문을 쭉 돌다가... Hibernate: select articletag0_.article_id as article_4_1_1_, articletag0_.uid as uid1_1_1_, articletag0_.uid as uid1_1_0_, articletag0_.created_at as created_2_1_0_, articletag0_.updated_at as updated_3_1_0_, articletag0_.article_id as article_4_1_0_, articletag0_.tag_id as tag_id5_1_0_ from article_tag articletag0_ where articletag0_.article_id in ( ?, ? )구글링을 해보니 batch_size를 큰 값으로 설정했어도 반드시 그 사이즈로 WHERE IN절에 데이터가 바인딩 되는 것이 아니라 하이버네이트 내부적으로 조정할 수도 있다고 하는데 해당 말이 맞는건지, 제가 무언가를 잘못한건지 궁금합니다. TRACE 로그를 확인해봤는데 ArticleEntity 조회 로직에서2022-09-17 22:38:32.511 TRACE 8458 --- [ Test worker] org.hibernate.type.CollectionType : Created collection wrapper: [springboot.domain.entity.ArticleEntity.articleTagEntities#88] .......................................... .......................................... 2022-09-17 22:38:32.515 TRACE 8458 --- [ Test worker] org.hibernate.type.CollectionType : Created collection wrapper: [springboot.domain.entity.ArticleEntity.articleTagEntities#1]이러한 로그가 총 12개 찍혔는걸로 봐서는 조회 시점에 프록시 객체는 모두 정상적으로 만들어 진 것으로 보입니다. 이전 질문을 찾아보니 요분과 테이블 구조는 거의 같다고 보시면 될 것 같습니다. (https://www.inflearn.com/questions/591443) 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
생성된 클래스들을 인식하지 못하고 있는것 같아서 질문 드립니다
(사진)
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OrderQueryRepository를 따로 만드는 이유
controller가 repository를 참조하게 되어서라고 하셨는데 ㅌ제가 배경지식이 없어 ㅠㅠ잘 이해가 가지 않습니다.. 조금더 구체적으로 설명 가능할까요?왜 controller가 repository를 참조하게 되는지 이해가 되지 않습니다.OrderQueryRepository를 따로 떼어내면 1번의 문제가 왜 해결되는지요?
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
V1, V2 실행 시 OrderItem 차이
안녕하세요.이전 강의에서 만든 v1 API와 이번 강의에서 만든 v2 API를 각각 호출해보면, 실행된 쿼리에 차이가 있는데요~v1에서는 order_items 테이블을 N번(2번) 조회하고, v2에서는 조회하지 않습니다. 이 차이가 왜 발생하는지 궁금합니다.Order의 List<OrderItem> @OneToMany 매핑 시 cascade 설정을 해두었고, v1은 Order 조회 및 lazy loading 강제 초기화 이후에 orders가 그대로 응답으로 나가는 과정에서 order_items 테이블이 조회된 걸까요?그렇다면 v2는 응답으로 사용하는 SimpleOrderDto를 생성할 때 order.orderItems를 불러오지 않기 때문에 order_items의 데이터가 필요하지 않아서 조회 쿼리가 발생하지 않은 거라고 보면 될까요? 코드는 아래와 같습니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
5분50초 postman으로 GetMapping 하는 부분 에러뜹니다.
찾아봐도 답이 안보여서 해결방법 부탁드립니다. 리턴타입을 String으로 두고 테스트해보면 잘 나오는데findAllByString과 findAll 메서드만 안되는거 보니 메서드의 문제 같습니다.해당 메서드로 [실전! 스프링 부트와 JPA 활용] 1탄에서 만든 view탭은 잘 띄워지는데 여기서는 왜 에러가 날까요감사합니다.