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
리팩토링 효과
- 코드가 훨씬 간결해진다
- 가독성이 좋아진다
- 중복 코드가 줄어든다
- 유지보수가 편해진다
리팩토링 단점
- 복잡한 페치 조건 표현이 제한적이다
- 대규모 조인이나 동적 쿼리에는 부적합할 수 있다
- 모든 상황에서 성능 최적화가 보장되지 않는다