Spring/코드 개선 (Refactoring)

[코드 개선 과제] JPQL fetch join -> @EntityGraph

가지코딩 2025. 6. 12. 11:31

1. 문제 인식 및 정의

Lv 2 단계에서 특정 메서드의 fetch join 구문을 리팩토링했지만,

여전히 여러 곳에 fetch join JPQL이 남아있는 상황

 

이를 리팩토링 하고자 함

 

 

JPQL fetch join 방식 단점

 

  • 쿼리가 복잡하고 길어져 가독성 저하
  • 중복된 fetch join 코드가 여러 곳에 존재
  • 페치 전략 변경 시 일일이 수정해야 해 유지보수 어려움
  • 재사용이 어렵고 관리가 번거로움

2. 해결 방안

JPQL fetch join 방식 -> @EntityGraph로 대체

  • 동일한 효과의 쿼리를 JPQL 없이도 적용 가능
  • 메서드 명 기반 쿼리 작성 시에도 연관 엔티티를 즉시 로딩(fetch join) 가능

3. 해결 완료

- JPQL fetch join 쿼리 대신 @EntityGraph 어노테이션 적용
- 메서드 명도 더 가독성 있게 수정
- @Param 제거

 

 

 

 

[Commit History]

https://github.com/gajicoding/spring-advanced/commit/4759120e87efe62d6cbef1bcbcf623c4e98e78dd

 

Lv 5. JPQL fetch join 구문 -> @EntityGraph 변경 · gajicoding/spring-advanced@4759120

- @EntityGraph 어노테이션 적용 - 메서드 명도 더 가독성있게 수정 - @Param 제거

github.com

 

 

리팩토링 효과

 

  • 코드가 훨씬 간결해진다
  • 가독성이 좋아진다
  • 중복 코드가 줄어든다
  • 유지보수가 편해진다

 

리팩토링 단점

 

  • 복잡한 페치 조건 표현이 제한적이다
  • 대규모 조인이나 동적 쿼리에는 부적합할 수 있다
  • 모든 상황에서 성능 최적화가 보장되지 않는다