전체보기

💾ORM:JPA

fetch join, 컬렉션, 페이징의 성능 최적화 방법

ToOne 관계는 모두 fetch join하여 성능 최적화 ( 페이징 쿼리에 영향을 미치지 않아서 ) 컬렉션은 fetch join 하지 않고 지연로딩으로 조회 컬렉션의 지연로딩 성능 최적화 + 페이징 처리를 위해 hibernate.default_batch_fetch_size 혹은 @BatchSize를 사용 hibetnate.default_batch_fetch_size, @BatchSize 컬렉션이나, 프록시 객체를 한꺼번에 설정한 size만큼 IN 쿼리로 조회한다.

💾ORM:JPA

컬렉션 fetch join에 대해

컬렉션(일대다) 에서 fetch join은 1개만 사용해야 한다! 데이터가 부정확하게 조회될 수 있기 때문 fetch join을 여러개 사용하는 경우 - Order 클래스 내부에 일대다 관계에 대한 필드가 2개인 경우 - Order 클래스 내부에 일대다 관계에 대한 필드가 1개고, 그 필드의 객체 내부에 일대다 관계에 있는 필드가 존재하는 경우 컬렉션(일대다) fetch join을 사용하면 페이징이 불가능하다 Hibernate가 경고 로그를 남기면서 모든 데이터를 db에서 읽어온 뒤, 메모리(=어플리케이션 단)에서 페이징을 처리하게 된다.(out of memory가 발생할 수 있음) distinct로 중복데이터 제거 컬렉션(일대다) fetch join은 중복 데이터가 발생하는데, distinct 명령으로..

👨‍💻프로젝트:Project

TAB(Take a Bus)

Take A Bus (TAB) 삼성청년SW아카데미(SSAFY) 개발기간: 2023.07.04 ~ 2023.8.18 배포 주소 프론트 서버 : https://i9d111.p.ssafy.io 백엔드 서버 : https://i9d111.p.ssafy.io/tab 실시간 키오스크 : https://i9d111.p.ssafy.io/kiosk/auth 개발팀 소개 신지훈 성연석 송민철 @wlgns1718 @abcd9351 @thdalscjf05 BackEnd BackEnd BackEnd 신제형 이정훈 @tlswpgud22 @wjdgns0631 FrontEnd FrontEnd 프로젝트 소개 TAB은 승차벨 기능이 있는 버스정류장 키오스크와, 다양한 웹 서비스를 제공합니다. 탑승객은 승차벨 버튼을 눌러 탑승의사를 표현..

⭐Docker

Docker

docker run docker의 이미지를 기반으로, 컨테이너를 생성하고 새 컨테이너가 시작됨 docker run node 'node' 이미지를 기반으로 컨테이너를 만들어 실행한다. ( 이미지가 로컬에 없으면 DockerHub에서 찾으려 시도) 컨테이너는 이미지의 code와 environment를 복사하지 않음 컨테이너는 이미지에 저장된 환경을 사용한다. 그런 다음 그 위에 부가적인 레이어(리소스, 메모리)를 추가함. docker start (컨테이너 ID 또는 이름) 기존에 존재하던 컨테이너를 다시 실행 실행하면 docker run과 같이 터미널을 차단하지는 않지만 실행 중(백그라운드로 실행 중) docker run docker start default가 attached 모드(포어그라운드에서 실행) d..

💾ORM:JPA

DTO에 getter가 필요한 이유

스프링 부트는 Jackson 라이브러리를 사용하는데 이를 통해 json 데이터들을 직렬화 / 역직렬화 작업을 진행한다. 이러한 직렬화를 위해 getter를 작성해줘야 한다

💾ORM:JPA

쿼리 방식 선택 순서

쿼리 방식 선택 순서 1. 우선 엔티티를 DTO로 변환하는 방법을 선택 /** * V2. 엔티티를 조회해서 DTO로 변환(fetch join 사용X) * - 단점: 지연로딩으로 쿼리 N번 호출 */ @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAll(); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(toList()); return result; } 2. 필요시 fetch join으로 성능 최적화 /** * V3. 엔티티를 조회해서 DTO로 변환(fetch join 사용O) * - fetch joi..

💾ORM:JPA

[spring-data-jpa] 페이징과 정렬

1. Page리스트를 반환값으로 가지고, Pageable을 매개변수로 가지는 함수 생성 2-1. Pageable에 넘겨줄 PageRequest를 생성 2-2. getContent() 메소드로 페이징 결과를 가져옴 2-3. getTotalElements() 메소드로 전체 결과 수를 가져옴 페이지 함수 page.getNumber() : 페이지 번호를 가져옴 page.getTotalPages() : 전체 페이지 갯수 page.isFirst() : 첫 번째 페이지인지 참/거짓 page.hasNext() : 다음 페이지 있는지 참/거짓 Page를 컨트롤러에서 반환해도 된다(json으로 반환 됨) entity는 dto로 바꿔서 반환하자 entity를 dto로 쉽게 바꾸는 방법

💾ORM:JPA

[spring-data-jpa] 쿼리 메소드 3가지

쿼리 메소드 3가지 1. 메소드 이름으로 쿼리 생성 2. JPA Named Query 3. 레포지토리 인터페이스에 쿼리를 직접 정의(@Query 어노테이션을 사용) 1번은 메소드 이름이 길어지면 문제가 됨 2번은 실무에서 거의 사용하지 않음 3번을 실무에서 많이 사용 3. 레포지토리 인터페이스에 쿼리를 직접 정의(@Query 어노테이션을 사용) 장점 : JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류를 발견할 수 있음 DTO 조회하는 방법 dto쪽에 생성자가 있어야 함 new + 모든 패키지 경로 + 생성자 방식으로 select 해야 함 컬렉션의 결과가 없으면 빈 컬렉션을 반환한다 null이 아닌 result =[ ] 이다. 단, Member 클래스 하나이면 null을 반환한다 db에 데이..

mc.thd
'분류 전체보기' 카테고리의 글 목록 (8 Page)