전체 글(256)
-
[5/30 ~ 6/3] stick 표현, 그건 나랑 잘 안 맞다, quick 표현, 비록 -해도, Learning By Teaching
[5/30] stick을 활용한 쓸모 있는 표현 4가지 https://youtu.be/NVNTYfBoQb0 1. stick together : 뭉치다 물리적인 것뿐만 아니라, 팀으로써 서로 support 하는 말로도 쓰입니다. We need to stick together. 2. stick to a plan / schedule : 계획대로 하다 / 계획에서 벗어나지 않게 행하다 정해진 계획에 따라서만 행동하다. Let's just stick to the plan. 3. stick one's neck out : 위험을 무릅쓰다. I stuck my neck out for him. 실력이 좀 부족할지라도, 그의 직업을 갖게 하기 위해 사장한테 추천한 경우 - 잘못되면 내 평판에도 영향을 줄 수도 있는 위험을..
2022.06.03 -
[API 개발 고급] 컬렉션 조회 최적화(페치 조인, 페이징)
앞의 예제에서는 toOne(OneToOne, ManyToOne) 관계만 있었습니다. 이번에는 컬렉션인 일대다 관계(OneToMany)를 조회하고, 최적화하는 방법을 알아보는 시간을 가져보겠습니다. 요구사항 "주문내역에서 추가로 주문한 상품 정보를 추가로 조회하자." 그럼 Order 기준으로 컬렉션인 OrderItem와 Item 이 필요합니다. "엔티티 직접 노출"은 이전 시간에 공부했던 것처럼 많은 문제가 있으므로, 컬렉션 조회 최적화에서는 엔티티를 DTO로 변환 한 후 최적화하는 것에 초점을 맞추도록 하겠습니다. V2 : 엔티티를 DTO로 변환(fetch join 사용 X) V3 : 엔티티를 DTO로 변환(fetch join 사용 O) 주문 조회 V2: 엔티티를 DTO로 변환(fetch join 사용 ..
2022.05.26 -
[API 개발 고급] 지연 로딩과 조회 성능 최적화(V4) 4/4
간단한 주문 조회 V4: JPA에서 DTO로 바로 조회 쿼리 1번 호출 select 절에서 원하는 데이터만 선택해서 조회 V3까지는 엔티티 조회 후 DTO로 변환하는 작업을 했습니다. V4에서는 JPA에서 DTO로 바로 조회하면서 조금 더 성능 최적화를 해보겠습니다. ❗의존관계 Repository에서 Controller 쪽으로 의존관계가 생기면 망합니다. 의존관계는 한 방향으로 해야합니다. Controller → Service → Repository로 가야 합니다. OrderSimpleApiController @GetMapping("/api/v4/simple-orders") public List ordersV4() { return orderRepository.findOrderDtos(); } OrderS..
2022.05.26 -
[API 개발 고급] ❗지연 로딩과 조회 성능 최적화(V3) 3/4
간단한 주문 조회 V3: 엔티티를 DTO로 변환 (fetch join 사용 O) 결론 : fetch join으로 쿼리 1번 호출 V2에서 발생한 성능 문제(N+1)를 해결하기 위해서 페치 조인을 사용해보겠습니다. ❗ [중요] ❗ 실무에서 JPA 성능 문제의 90%는 N+1에서 발생하고 페치 조인은 성능 최적화를 위해서 자주 사용하기때문에 100% 이해하고 있어야 합니다. OrderSimpleApiController package jpabook.jpashop.api; /** * @XToOne 관계(ManyToOne, OneToOne에서의 성능최적화) * Order * Order -> Member * Order -> Delivery */ @RestController @RequiredArgsConstructo..
2022.05.25 -
[API 개발 고급] 지연 로딩과 조회 성능 최적화(V2) 2/4
간단한 주문 조회 V2: 엔티티를 DTO로 변환 (fetch join 사용 X) 결론 : 지연 로딩으로 쿼리 N번 호출 N + 1문제 해결 : fetch join 사용 → V3에서 설명 OrderSimpleApiController package jpabook.jpashop.api; /** * @XToOne 관계(ManyToOne, OneToOne에서의 성능최적화) * Order * Order -> Member * Order -> Delivery */ @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMapping("/ap..
2022.05.25 -
[API 개발 고급] 지연 로딩과 조회 성능 최적화(V1) 1/4
앞으로 4개의 포스팅에 걸쳐서 지연 로딩 때문에 발생하는 성능 문제를 단계적으로 해결해보겠습니다. 오늘은 첫 번째 시간으로 V1(버전 1)에 대해서 정리하고 문제점과 주의점 그리고 대안에 대해서 정리해보겠습니다. 추천드리는 방법은 아니기 때문에 가볍게 보시면 될 것 같습니다. 결론 : 엔티티를 직접 노출하지 말자! 간단한 주문 조회 V1 : 엔티티를 직접 노출 주문(Order) + 배송정보(Delivery) + 회원(Member)을 조회하는 API를 만들어보겠습니다. OrderSimpleApiController package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.repository.OrderRepo..
2022.05.25