전체보기

📂ORM:JPA

[spring-data-jpa] 반환타입

컬렉션 타입 결과값이 없는 경우 빈 컬렉션을 반환해준다. (null을 반환하지 않음!) 따라서 !=null 과 같은 처리를 해줄 필요가 없다. 단건 조회 결과값이 없는 경우 null을 반환한다 (순수한 jpa의 경우 javax.persistence.NoResultException 예외 발생) 결과가 2건 이상인 경우 javax.persistence.NonUniqueResultException 예외 발생

📂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로 쉽게 바꾸는 방법

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