[JPA] 조회 시 인터페이스로

Ceing·2025년 10월 14일

JPA

목록 보기
12/15

Spring Data JPA의 인터페이스 조회란?

  • Spring Data JPA는 조회 시 getter로만 정의된 인터페이스로 데이터를 담아주는 문법을 갖고 있음
  • 일단 엔티티로 조회하면 불필요한 데이터도 조회돼서 연관관계도 조회돼서 n+1 성능이슈도 발생할 수 있고 성능도 저하됨, 그에 따른 연관관계 필드 조회 시 지연 로딩 문제로 인해 n+1발생 확률 또 생김
  • 인터페이스로 조회하면 new DTO로 직접 dto에 필드를 하나하나 매핑하지 않아도 인터페이스에 데이터들을 JPA가 알아서 담아줘서 꿀임
  • 또한 해당 인터페이스는 오직 getter만 정의했으므로 읽기 전용이므로 성능 면에서도 우수하고 수정될 위험 없음
  • Spring Data JPA는 같은 이름의 getter로 데이터를 담아줌

예시

1. GameScheduleInterface

public interface GameScheduleInterface {
    int getSeasonId();
    String getSeasonName();
    String getGameType();
    String getGameTypeName();
    int getGameNo();
    Integer getGameStageNo();
    String getDayOfWeek();
    String getGameDate();
    String getGameTime();
    String getHomeOrAway();
}

2. GameScheduleRepository

@Query("""
    SELECT 
        s.seasonId AS seasonId,
        s.season.name AS seasonName,
        s.gameType AS gameType,
        s.gameType.name AS gameTypeName,
        s.gameNo AS gameNo,
        s.gameStageNo AS gameStageNo,
        s.dayOfWeek AS dayOfWeek,
        s.gameDate AS gameDate,
        s.gameTime AS gameTime,
        s.homeOrAway AS homeOrAway
    FROM GameSchedule s
    WHERE s.gameDate = :gameDate
""")
List<GameScheduleInterface> getGameScheduleListByGameDate(@Param("gameDate") String gameDate);

위와 같은 상황일때 동일한 이름에 해당되는 getter에 조회된 데이터들을 삽입해줌

profile
이유에 대해 끊임없이 생각하고 고민하는 개발자

0개의 댓글