API 개발 고급 정리
📍 API 개발 정리
엔티티 조회
- 엔티티를 조회해서 그대로 반환
- 엔티티 조회 후 DTO로 변환
- 페치 조인으로 쿼리 수 최적화
- 컬렉션 페이징과 한계 돌파
- 컬렉션은 페치 조인시 페이징이 불가능
- ToOne 관게는 페치 조인으로 쿼리 수 최적화
- 컬렉션은 페치 조인 대신 지연 로딩을 유치하고,
hibernate.default_batch_fetch_size
,@BatchSize
로 최적화
DTO 직접 조회
- JPA에서 DTO를 직접 조회
- 컬렉션 조회 최적화 - 일대다 관계인 컬랙션은 IN 절을 활용하여 메모리에 미리 조회해서 최적화
- 플랫 데이터 최적화 - JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환
📍 API 개발 권장 순서
- 엔티티 조회 방식으로 우선 접근
- 페치 조인으로 쿼리 수를 최적화
- 컬렉션 최적화
- 페이징 필요 :
hibernate.default_batch_fetch_size
,@BatchSize
로 최적화 - 페이징 필요 X : 페치 조인 사용
- 페이징 필요 :
- 거의 코드를 수정하지 않고, 옵션만 약간 변경해서 다양한 성능 최적화를 시도할 수 있음
- 엔티티 조회 방식으로 해결이 안될 경우 DTO 조회 방식 사용
- 최적화 시 많은 코드를 변경해야 함
- DTO 조회 방식으로 해결이 안되면 NatveSQL or 스프링 JdbcTemplate 사용
📌 개발자는 성능 최적화와 코드 복잡도 사이에서 줄타기 해야함
📍 DTO 조회 방식의 선택지
- DTO로 조회하는 방법도 각각 장단점이 있음 (V4: 기본, V5 :컬렉션 조회 최적화(IN 절), V6: 플랫 데이터 최적화)
- V4는 코드가 단순. 특정 주문 한 건만 조회하는 경우(단건 조회) 이 방식을 사용해도 성능이 잘 나옴.
- V5는 코드가 복잡. 여러 주문을 한번에 조회하는 경우에는 V4 대신 V5를 사용해야함. (V4 : 1 + N, V5: 1 + 1 와 같이 쿼리가 실행되므로)
- V6는 완전히 다른 접근 방식. 일대다가 조인 되더라도 쿼리는 한번 나가는 장점이 있음. 다만 페이징은 불가능함.
** '실전! 스프링 부트와 JPA 활용2' 강의를 듣고 작성했습니다.
'Spring' 카테고리의 다른 글
[Spring] 배포 서버의 도커 컨테이너에 크롤링 환경 구축하기 (2) | 2023.04.30 |
---|---|
[Spring] OSIV와 성능 최적화 (0) | 2023.04.27 |
[Spring] API 개발 컬렉션 조회 최적화 (0) | 2023.04.24 |
[Spring] 엔티티를 DTO로 변환한 API 설계 (0) | 2023.04.23 |
[Spring] 엔티티를 노출한 API 생성하기 (0) | 2023.04.21 |