본문 바로가기
개발/Spring

spring-data-jpa Repository에서 Entity로 반환받는 이유

by meanjung 2023. 8. 2.

spring data jpa에서 Repository에서 Entity로 반환받는 이유가 궁금했다.

 

나는

 

MyEntity가 Entity이고,

 

아래와 같이 특정 컬럼만 조회해오기 위해서 인터페이스를 만들고 Repository에서 이 인터페이스로 응답을 받았다.

public interface MySpecificColumn {

    String getUserName();
    String getUserImg();

}
public interface MyRepository extends JpaRepository<MyEntity, Long> {

    List<MySpecificColumn> findTop10ByOrderByUserIdAsc();

}

 

 

그런데 다른 사람들의 코드를 보니, 다들 Repository에서 List<MyEntity> findTop10ByOrderByUserIdAsc(); 이런식으로 받아서

서비스 단에서 Dto로 변환해서 처리하더라...

 

만약 그렇게 하면 모든 컬럼을 다 가져오기 때문에 낭비가 아닌가?? 라는게 내 궁금증이었다.

 

 

김영한님의 답변을 발견했다. 

 

TLDR

  • 컬럼을 하나하나 찍는 것이 데이터 전송량이 줄어들기 때문에 성능상 더 유리합니다.
  • 다만 이렇게 원하는 컬럼만 찍어서 조회하게 되면 재사용성이 떨어집니다.
  • 결국 성능과 범용성의 트레이드 오프가 발생합니다.
  • 성능을 최적화 할 수록 범용성이 줄어드는 것이지요.
  • 그렇다면 어떤 선택이 좋은 선택일까요?
  • 일반적으로 필드 몇 개가 더 추가된다고 해서 조회 성능이 급격하게 떨어지거나 하지는 않습니다.
  • 트래픽이 매우 많은 서비스에서 수십개의 데이터 목록을 한번에 보여주어야 할 때는 최적화가 의미가 있습니다.
  • 제가 추천하는 방법은 유지보수를 위해 범용성을 먼저 생각해서 개발하고, 이후 성능 테스트나 서비스 지표등을 보고 필요한 부분을 점진적으로 최적화 하는 것입니다.

 

https://www.inflearn.com/questions/244464/select-%EC%A1%B0%ED%9A%8C-%EC%84%B1%EB%8A%A5-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8?re_comment_id=119988 

 

select 조회 성능 관련 질문 - 인프런 | 질문 & 답변

1. 일반 db에서 select * from 보다 select 칼럼명 from보통 후자의 방법으로 원하는 칼럼들만 부르는 게 성능 면에서 더 뛰어난 게 아닌지 궁금합니다.2. 복잡한 테이블에서 전체 칼럼의 갯수가 20~30개가

www.inflearn.com

 

댓글