티스토리 뷰
[ChatGPT] queryDsl에서 CustomRepsitory 인터페이스를 따로 만드는 이유
kkoon9 2023. 8. 9. 22:20QueryDsl이란?
Querydsl은 JPA 기반의 데이터베이스 조회 및 조작을 위한 라이브러리입니다.
복잡한 쿼리(ex 동적 쿼리)를 더 쉬운 작성을 도와줍니다.
CustomRepository
CustomRepository 인터페이스는 Querydsl을 사용하여 데이터베이스 작업을 수행하는 데 도움을 주는 방법 중 하나입니다.
@Repository
interface MenuRepository: JpaRepository<Menu, Long>, CustomMenuRepository
interface CustomMenuRepository {
fun findByCafeId(cafeId: Long)
}
class CustomMenuRepositoryImpl: CustomMenuRepository {
override fun findByCafeId(cafeId: Long) {
TODO("Not yet implemented")
}
}
Repository 인터페이스에 CustomRepository를 상속받는 이유
이건 매우 일반적이며, Spring Data JPA에서도 이와 유사한 패턴을 권장한다고 합니다.
이러한 방식은 코드의 모듈화, 확장성, 유지보수성을 향상시키기 위해 사용됩니다.
이유 [1]. 단일 책임 원칙을 지킬 수 있다.
Repository 인터페이스는 주로 데이터 엑세스와 관련된 메서드를 정의합니다.
CustomRepository 인터페이스는 특화된 쿼리 로직이나 비즈니스 로직을 정의합니다.
이렇게 분리함으로써 단일 책임 원칙을 준수하며 코드를 더 관리하기 쉽게 만들 수 있습니다.
이유 [2]. 모듈화와 확장성
CustomRepository 인터페이스를 상속받는 구현체를 만들어 사용하면, 원래의 Repository에 존재하지 않는 특화된 메서드를 사용할 수 있습니다.
예시로, 두 개의 엔티티를 조인해서 사용하는 쿼리도 간단하게 구현할 수 있습니다.
또한 다른 CustomRepository 인터페이스를 생성하여 다양한 비즈니스 요구사항에 맞는 메서드를 추가할 수 있습니다.
이유 [3]. 코드 분리와 가독성
CustomRepository 인터페이스는 코드의 목적과 의도를 더 잘 드러내게 도와줍니다.
클라이언트 코드에서는 CustomRepository를 통해 특화된 로직이 어떻게 동작하는지 명확하게 이해할 수 있습니다.
이유 [4]. 컴파일 타임 타입 안정성
CustomRepository 인터페이스를 사용하면 Querydsl 등을 활용하여 타입 안정성을 확보할 수 있습니다.
문자열 기반의 쿼리 생성 대신 메서드를 호출하는 방식을 사용하므로 컴파일 타임에 오류를 찾을 수 있습니다.
결론
요약하면, 코드의 모듈화, 확장성, 유지보수성을 향상시키는 좋은 방법입니다.
이를 통해 코드의 가독성을 높이고 관련 기능들을 적절하게 분리하여 개발과 유지보수를 효율적으로 할 수 있습니다.
'Sping Framework > Spring JPA' 카테고리의 다른 글
JPQL과 QueryDsl의 차이점에 대해서 (0) | 2023.02.28 |
---|---|
JPA 영속성 컨텍스트의 장점 (0) | 2023.02.12 |
엔티티의 정의와 생명주기(lifecycle) (0) | 2023.02.11 |
- Total
- Today
- Yesterday
- 이펙티브 자바
- BAEKJOON
- 이팩티브 자바
- 알고리즘
- 정규표현식
- Java
- 클린 코드
- 백준
- 프로그래머스
- 클린 아키텍처
- AWS
- Spring Boot
- JPA
- kotest
- 디자인패턴
- BOJ
- C++
- MSA
- kkoon9
- Spring
- Kotlin
- programmers
- Olympiad
- 코테
- Algorithm
- 테라폼
- 디자인 패턴
- Effective Java
- 객체지향
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |