기존의 구조는 위와 같았다.
ItemRepository 인터페이스를 사용하기 때문에 억지로 JpaRepository를 상속받는 자식을 필드에 넣어 사용했다.
구조적으로 안정되어 있는 상태이나 복잡한 상황이다.
기본적인 기능은 SpringDataJpa를, 복잡한 쿼리는 QueryDsl을 사용하도록 분리시킨다.
@Service
@RequiredArgsConstructor
@Transactional
public class ItemServiceV2 implements ItemService {
private final ItemRepositoryV2 itemRepositoryV2;
private final ItemQueryRepositoryV2 itemQueryRepositoryV2;
...
}
구조적인 안정성과 실용적인 편리함의 트레이드 오프가 발생하기 때문에 상황에 맞게 잘 설계해야 한다.