분류 전체보기
-
[Vue.js] the template root requires exactly one element.error 2023. 3. 12. 18:47
vue.js를 시작해 보기에 앞서 에러가 났다. 설치하고 파일을 연결했을 뿐인데 에러가 나서 당황했다. 에러 : the template root requires exactly one element. 찾아보니 실제 에러는 아니고 template 태그 안에 반드시 루트 태그가 있어야 했다. 안의 내용을 로 묶어주면 에러 해결 (참고) https://skillazit.tistory.com/46
-
프로젝트 기본 환경설정 - 1프로젝트 2023. 1. 18. 14:04
1) 스프링부트 스타터 프로젝트 생성 2) mysql 연동 3) bootstrap 템플릿 적용하기 스프링부트 스타터 프로젝트 생성하기 [스프링부트/웹 애플리케이션 개발]스프링부트스타터 프로젝트 생성, 스프링부트버전확인, lombok 1. 프로젝트 생성 스프링 부트 스타터(https://start.spring.io/) - dependencies > spring web > thymeleaf > spring data JPA > H2 Database > Lombok > Validation 2. 스프링부트 버전 확인 - build.gradle 에서 확인 가능 3. run > 오류 gitofjy.tistory.com mysql 연동 1. sampledb 생성 C:\Users\USER>mysql -u root -p ..
-
[스프링부트/웹 애플리케이션 개발]스프링 데이터 JPA, QueryDSL스프링&스프링부트 2023. 1. 17. 16:23
스프링 데이터 JPA ( https://spring.io/projects/spring-data-jpa ) - 스프링 데이터 JPA는 JPA를 사용할 때 지루하게 반복하는 코드를 자동화 MemberRepository package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import java.util.List; @Repository @RequiredArgsConstructor public class Me..
-
[스프링부트/웹 애플리케이션 개발]API 개발 고급 - 실무 필수 최적화스프링&스프링부트 2023. 1. 17. 14:38
OSIV와 성능 최적화 - Open Session In View: 하이버네이트 - Open EntityManager In View: JPA OSIV ON - spring.jpa.open-in-view : true (기본값) - OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 그래서 지금까지 View Template이나 API 컨트롤러에서 지연 로딩이 가능했던 것이다 - 장점 > 지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지 - 단점 > 전략은 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서..
-
[스프링부트/웹 애플리케이션 개발]API 개발 고급 정리스프링&스프링부트 2023. 1. 16. 23:15
- 엔티티 조회 > 엔티티를 조회해서 그대로 반환: V1 (엔티티 스펙이 변하면 API 스펙 자체도 변하기 때문에 절대 사용 금지) > 엔티티 조회 후 DTO로 변환: V2 (여러 테이블 시 성능이 떨어질 수 있음 > 페치 조인) > 페치 조인으로 쿼리 수 최적화: V3 (페치 조인의 경우 컬렉션의 경우 페이징 불가) > 컬렉션 페이징과 한계 돌파: V3.1 > 컬렉션은 페치 조인시 페이징이 불가능 > ToOne 관계는 페치 조인으로 쿼리 수 최적화 > 컬렉션은 페치 조인 대신에 지연 로딩을 유지하고, hibernate.default_batch_fetch_size , @BatchSize 로 최적화 - DTO 직접 조회 > JPA에서 DTO를 직접 조회: V4 > 컬렉션 조회 최적화 - 일대다 관계인 컬렉..
-
[스프링부트/웹 애플리케이션 개발]API 개발 고급 - 컬렉션 조회 최적화 -4,5,6스프링&스프링부트 2023. 1. 16. 22:25
주문조회 V4: JPA에서 DTO 직접 조회 OrderApiController @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; private final OrderQueryRepository orderQueryRepository; @GetMapping("/api/v4/orders") public List ordersV4() { return orderQueryRepository.findOrderQueryDto(); } } OrderQueryRepository package jpabook.jpashop.repository.order.query..
-
[스프링부트/웹 애플리케이션 개발]API 개발 고급 - 컬렉션 조회 최적화 -3스프링&스프링부트 2023. 1. 13. 19:55
주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화 public List findAllWithItem() { return em.createQuery( "select distinct o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class) .getResultList(); } @GetMapping("/api/v3/orders") public List ordersV3() { List orders = orderRepository.findAllWithItem(); List result = orders.st..
-
[스프링부트/웹 애플리케이션 개발]API 개발 고급 - 컬렉션 조회 최적화 -1,2스프링&스프링부트 2023. 1. 13. 14:03
- 컬렉션인 일대다 관계 (OneToMany)를 조회하고, 최적화하는 방법 - 주문내역에서 추가로 주문한 상품 정보를 추가로 조회 - Order 기준으로 컬렉션인 OrderItem 와 Item 이 필요하다. 주문조회 V1: 엔티티 직접 노출 package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderItem; import jpabook.jpashop.repository.OrderRepository; import jpabook.jpashop.repository.OrderSearch; import lombok.RequiredArgsConstructor; import org.springfr..