검색해보니 서비스 간 상호의존 문제, 강하게 연결되는 서비스를 묶기 위해 퍼사드 패턴을 적용할 수 있다고 한다.
기존에는 서비스 레이어에서는 무조건 DTO를 반환하게끔 하였는데, 퍼사드를 적용하고 나서는 Entity와 직접 연결되는 서비스는 Entity를 반환하게끔 하였다. DTO를 반환하게 할 경우 Entity -> DTO -> Entity로 변환을 해야 하거나, 불필요한 쿼리가 발생하게 되었다. Entity를 직접 이용하며 한 개의 Transaction으로 묶을 경우 영속성 컨텍스트를 이용할 수 있으므로 불필요한 쿼리 발생을 줄일 수 있었다.
아래는 예시이다.
@RequiredArgsConstructor
@Service
public class GetTodayMatchPartnerList {
private final MatchService matchService;
private final MemberService memberService;
private final CountService countService;
@Transactional
public List<MemberDto> execute(Long memberId){
Member member = memberService.getMemberById(memberId);
if(countService.getSwipeCount(member).isExhausted()){
return Collections.emptyList();
}
List<MemberDto> todayMatchPartnerList = matchService.getTodayMatchPartnerList(member);
if (todayMatchPartnerList.size() > 5) {
todayMatchPartnerList = todayMatchPartnerList.subList(0, 5);
}
return todayMatchPartnerList;
}
}