SpringBoot API ์ฃผ์ํ ์
- ์ํฐํฐ๋ฅผ ์ง์ ๋ ธ์ถํ์ง ๋ง๊ณ DTO ๋ณํํด๋ผ
- ์ง์ฐ ๋ก๋ฉ(LAZY)๋ฅผ ํผํ๊ธฐ ์ํด ์ฆ์ ๋ก๋ฉ(EARGER)๋ก ์ค์ ํ๋ฉด ์๋๋ค. ์ฆ์ ๋ก๋ฉ ๋๋ฌธ์ ์ฐ๊ด๊ด๊ณ๊ฐ ํ์์๋ ๊ฒฝ์ฐ์๋
๋ฐ์ดํฐ๋ฅผ ํญ์ ์กฐํํด์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ํญ์ ์ง์ฐ๋ก๋ฉ์ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ , ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ํ์น์กฐ์ธ์ ์ฌ์ฉํด๋ผ! (+์ง์ฐ๋ก๋ฉ์ ๊ฒฝ์ฐ ์ฐ๊ด๋ ์ํฐํฐ๋ ํ๋ก์๋ก ์ค์ ๋์ด์๊ณ getName()๊ณผ ๊ฐ์ด ์ง์ ํธ์ถํด์ผ LAZY๊ฐ ๊ฐ์ ์ด๊ธฐํ๋จ)
Controller API ์์
@GetMapping("/api/v3/orders")
public List<OrderDto> ordersV3() {
List<Order> orders = orderRepository.findAllWithItem();
List<OrderDto> result = orders.stream()
.map(order -> new OrderDto(order))
.collect(Collectors.toList());
return result;
@Data
static class OrderDto {
private Long orderId;
private String name;
private OrderStatus orderStatus;
private Address address; // ๊ฐ ํ์
์ ๋
ธ์ถํด๋ OK
private List<OrderItemDto> orderItems; // OrderItemDto๋ก ๋งคํ(์ํฐํฐ ์ธ๋ถ์ ๋
ธ์ถ ๋ง๊ธฐ ์ํด)
public OrderDto(Order o) {
orderId = o.getId();
name = o.getMember().getName(); //LAZY ์ด๊ธฐํ
orderStatus = o.getStatus();
address = o.getDelivery().getAddress(); // LAZY ์ด๊ธฐํ
o.getOrderItems().stream().forEach(order -> order.getItem().getName());
//OrderItem์ OrderItemDto๋ก ๋ณํ
orderItems = o.getOrderItems().stream()
.map(orderItem -> new OrderItemDto(orderItem))
.collect(Collectors.toList());
}
}
@Getter
static class OrderItemDto{
private String itemName;
private int orderPrice;
private int count;
public OrderItemDto(OrderItem orderItem) {
itemName = orderItem.getItem().getName();
orderPrice = orderItem.getOrderPrice();
count = orderItem.getCount();
}
}
}
- DTO ํด๋์ค์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ํฐํฐ๋ก ๋๊ธธ ์ ์์ (But, jpql์ ๊ฐ์ ์ฟผ๋ฆฌ์์๋ ์ํฐํฐ๊ฐ ์๋ณ์๋ก ์ธ์๋๊ธฐ๋๋ฌธ์ ์๋จ!)
- OrderDto์ ์กด์ฌํ๋ OrderItems๋ ์ํฐํฐ์ด๋ฏ๋ก ์ธ๋ถ ๋ ธ์ถ์ ๋ง๊ธฐ ์ํด DTO๋ก ๋ณํํด์ฃผ์ด์ผํจ
** ์กฐํ ์ฑ๋ฅ ์ต์ ํ
- ToOne ๊ด๊ณ์์๋ fetch join์ผ๋ก ํ๋ฒ์ ์ ๋ถ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ข๋ค.
- ToMany ๊ด๊ณ์์๋ ToOne ์ธ๊ฒ๋ค๋ง fetch join์ผ๋ก ํ๊ณ ์ปฌ๋ ์ ์ batch size๋ก ํต์ ํ์!!
(ํ์ด์ง์ด ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํจ)
(ํ์น์กฐ์ธ์ผ๋ก ํ๋ ๊ฒ์ ๋นํด ์ฟผ๋ฆฌ ์๋ ์ฆ๊ฐํ์ง๋ง DB ๋ฐ์ดํฐ ์ ์ก๋์ด ๊ฐ์ํ๋ค)
(batch size๋ 100~1000 ์ ๋๊ฐ ๊ฐ์ฅ ์ข๋ค)
(1000๊ฐ๊ฐ ์ฟผ๋ฆฌ์๋ฅผ ์ค์ผ ์ ์์ด ์ฑ๋ฅ์ ๊ฐ์ฅ ์ข์ง๋ง DB์ ์๊ฐ ๋ถํ๊ฐ ์ฆ๊ฐํ ์ ์๋ค)