본문 바로가기

Fetch Join3

Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 7 이번 포스팅에서는 AWS S3에 사용자의 프로필 이미지를 CRUD(?)한 과정을 담는다. AWS S3가 뭘까? AWS Simple Storage Service의 줄임말로 Object Storage 개념이 적용되었다고 생각하면 된다. 파일을 저장하고 불러오는 작업이 RESTful API를 통해 간단하고 뛰어난 보안성을 자랑한다. 장점 거의 무제한에 가까운 용량이다.(물론 용량 제한도 설정할 수 있다.) 보안성이 아주 좋다. 저렴한 비용 플랫 구조를 사용한 빠른 탐색 높은 객체 가용성 개인적으로 AWS S3는 학부연구생을 하며 Object Storage 개념의 Ceph에 관한 논문을 작성했기에 친숙했다. Object Storage 관련해서는 아래 포스팅을 참고 바란다. https://hdbstn3055.ti.. 2024. 2. 26.
[SpringBoot] JPA Collection 페치 조인 최적화 Collection은 @ManyToOne가 아닌 @OneToMany를 사용하는 변수에 사용된다. 하지만, @OneToMany. 즉, 일대다 관계에서 Collection을 조회하면 데이터가 뻥튀기가 된다. 예를 들어, Order(주문), OrderItem(주문된 아이템)이 있다고 했을 때 관계의 주인은 OrderItem이다. 하지만, 관계의 주인(외래키)은 N인 OrderItem이 갖고 있으므로, Order를 기준으로 조인을 진행하면 데이터가 늘어난다. 그렇기에 반환시 중복된 데이터가 나오게 된다. 따라서, 기존의 페치 조인 최적화 쿼리와는 달리 jpql 혹은 querydsl에서 distinct를 추가 해주어야 한다. @Override public List findAllWithItem() { QOrder .. 2024. 1. 29.
[SpringBoot] JPA 페치 조인 최적화 1. 특정 조회 작업 시 엔티티를 그냥 반환하는 경우 @GetMapping("/api/v2/simple-orders") public List ordersV2(){ //ORDER 2개 //N + 1 -> 1 + 회원 N + 배송 N List orders = orderRepository.findAll(new OrderSearch()); List collect = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(Collectors.toList()); return collect; } 문제점 1 만약 엔티티 설정에 지연 로딩으로 설정하여 놓았다면, 해당 엔티티와 연관된 엔티티들에는 프록시가 들어간다. 하지만, 기본적으로 이 프록시 객체를 Json으로 생성하는.. 2024. 1. 26.