CH03 전체 정리
API 개발 고급 정리
지금까지 살펴본 모든 방식을 전체적으로 한번 리뷰했다.
결론적으로 데이터를 조회할 일이 있을때 내가 기준으로 삼을 사고의 프레임은 아래와 같이 정리할 수 있을 것 같다. 안보고 바로 떠올릴 수 있게 철저히 내재화 하도록 하자.
~ToOne(OneToOne, ManyToOne) 인 값(필드) 중 초기화하여 사용해야할 값(필드)은 모두 페치조인 적용하며, 사용하지 않아도 되면 굳이 페치조인 걸지 않고 LAZY로 남겨둔다.
OneToMany 관계인 컬렉션이 존재하며 이를 사용해야한다면, 페이징 적용 필요 여부에 따라 경우가 분기.
2-1. 페이징 적용 O : hibernate.default_batch_fetch_size 또는 @BatchSize 를 적용하여 in 절 수행되도록 처리
2-2. 페이징 적용 X : distinct 걸고 페치 조인을 사용
엔티티 조회 방식으로 해결이 안되면 DTO 조회 방식 사용
1, 2, 3 방식 사용해도 개선이 불가능하면 NativeSQL or 스프링 JdbcTemplate (사실 1, 2 안되면 캐싱 적용해야할 수준이지 않을까)
개인적으로 1, 2 까지만 고려되어도 성능 개선은 충분하다고 본다. 강의에서도 같은 의견이었다.
DTO 직접 조회(바로 DTO 로 추출) 방식에 관해서는 정리를 남기지 않겠다. 개인적으로도 선호하지 않고 강사님도 추천하지 않는 방식이다. 일단 로직 자체가 너무 프레젠테이션 레이어에 의존되는 코드가 나올 수 밖에 없는데, 그에 비해서 드라마틱한 성능 개선이 아니다. 트레이드오프를 따지면 유지보수가 어렵고 코드 재활용이 어렵다는 측면에서 손해가 너무 큰 장사다. 그래서 사용할 일이 없을 것 같다.
Last updated