๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring-study๐ŸŒฑ/SpringBoot-JPA53

Section 11-1. OSIV์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™” OSIV์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™” Open Session In View: ํ•˜์ด๋ฒ„๋„ค์ดํŠธ Open EntityManager In View: JPA (๊ด€๋ก€์ƒ OSIV๋ผ ํ•œ๋‹ค.) spring.jpa.open-in-view์˜ ๊ธฐ๋ณธ๊ฐ’์€ true์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ warn ๋กœ๊ทธ๊ฐ€ ๋‚จ๊ฒจ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 2023-01-16 13:48:36.691 WARN 12140 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. .. 2023. 1. 16.
Section 10-8. API ๊ฐœ๋ฐœ ๊ณ ๊ธ‰ ์ •๋ฆฌ API ๊ฐœ๋ฐœ ๊ณ ๊ธ‰ ์ •๋ฆฌ ์ง€๊ธˆ๊นŒ์ง€ API ๊ฐœ๋ฐœ ๊ณ ๊ธ‰ ๋ถ€๋ถ„์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•๋“ค์„ ์ ์šฉ์‹œ์ผœ ๋ณด์•˜์—ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•ด์„œ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜: V1 - ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค. ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ ํ›„ DTO๋กœ ๋ณ€ํ™˜: V2 - ์ฟผ๋ฆฌ๋ฌธ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค. = N+1๋ฌธ์ œ ๋ฐœ์ƒ ํŽ˜์น˜ ์กฐ์ธ์œผ๋กœ ์ฟผ๋ฆฌ ์ˆ˜ ์ตœ์ ํ™”: V3 - ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ํ•ด๊ฒฐ๋˜์ง€๋งŒ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„์—์„œ๋Š” ํŽ˜์น˜ ์กฐ์ธ์‹œ ํŽ˜์ด์ง•์ด ์•ˆ๋˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ปฌ๋ ‰์…˜ ํŽ˜์ด์ง•๊ณผ ํ•œ๊ณ„ ๋ŒํŒŒ ๋ฐฉ๋ฒ•: V3.1 ์ปฌ๋ ‰์…˜์€ ํŽ˜์น˜ ์กฐ์ธ์‹œ ํŽ˜์ด์ง•์ด ๋ถˆ๊ฐ€๋Šฅ ToOne ๊ด€๊ณ„๋Š” ํŽ˜์น˜ ์กฐ์ธ์œผ๋กœ ์ฟผ๋ฆฌ ์ˆ˜ ์ตœ์ ํ™” ์ปฌ๋ ‰์…˜์€ ํŽ˜์น˜ ์กฐ์ธ ๋Œ€์‹ ์— ์ง€์—ฐ ๋กœ๋”ฉ์„ ์œ ์ง€ํ•˜๊ณ , hibernate.default_batch_fetch_size ,@BatchSize ๋กœ ์ตœ์ ํ™”.. 2023. 1. 16.
Section 10-7. ์ฃผ๋ฌธ ์กฐํšŒ V6: JPA์—์„œ DTO๋กœ ์ง์ ‘ ์กฐํšŒ, ํ”Œ๋žซ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™” API ๊ฐœ๋ฐœ @GetMapping("/api/v6/orders") public List ordersV6() { List flats = orderQueryRepository.findAllByDto_flat(); return flats.stream() .collect(groupingBy(o -> new OrderQueryDto(o.getOrderId(), o.getName(), o.getOrderDate(), o.getOrderStatus(), o.getAddress()), mapping(o -> new OrderItemQueryDto(o.getOrderId(), o.getItemName(), o.getOrderPrice(), o.getCount()), toList()) )).entrySet().stream.. 2023. 1. 15.
Section 10-6. ์ฃผ๋ฌธ ์กฐํšŒ V5: JPA์—์„œ DTO ์ง์ ‘ ์กฐํšŒ - ์ปฌ๋ ‰์…˜ ์กฐํšŒ ์ตœ์ ํ™” package jpabook.jpashop.repository.order.query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Repository @RequiredArgsConstructor public class OrderQueryRepository { private final EntityManager em; public List findOrderQueryDtos() { .. 2023. 1. 15.
Section 10-5. ์ฃผ๋ฌธ ์กฐํšŒ V4: JPA์—์„œ DTO ์ง์ ‘ ์กฐํšŒ ์ด์ „ simple ๋ฒ„์ „์—์„œ ํ–ˆ๋˜ ๊ฑด๋ฐ ์ด๋ฒˆ์—๋Š” ์ปฌ๋ ‰์…˜์ด ์žˆ์„ ๋•Œ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. JPA์—์„œ DTO๋ฅผ ์ง์ ‘ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง์ ‘ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. package jpabook.jpashop.repository.order.query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import java.util.List; @Repository @RequiredArgsConstructor public class OrderQueryRepository { .. 2023. 1. 15.