본문 바로가기

삽질 기록3

[JPA] 같은 엔티티를 조회함에도 불구하고 쿼리가 여러번 날아가는 이유 최근 사내 프로젝트 코드에서 단일 책임 원칙을 지키지 않는 메서드가 발견되어 이를 분리한 경험이 있는데요. 분리를 하게 되면서, 미처 신경쓰지 못한 부분 때문에 같은 엔티티를 조회함에도 불구하고, 조회 쿼리가 2번 날아가게된 삽질 경험이 있어 기록하고자 합니다. 해당 메서드는 금액을 변경하는 로직과 변경 후 금액을 조회하는 로직이 함께 섞여있었는데요. 이는 단일 책임 원칙을 지키지 않는 코드라고 판단되어, 변경 로직과 조회 로직을 아래와 같이 분리를 하였습니다. (로직은 매우 간소화 하였으니 참고 부탁드립니다.) public class MoneyService { private final UserMoneyRepository userMoneyRepository; public MoneyService(UserM.. 2023. 10. 7.
QueryDsl Projection 생성자 관련 삽질 기록 Projection관련하여, DTO클래스의 QClass 생성자가 제대로 생성이 제대로 안되길래 아래의 내용들을 의심했으나 역시나 삽질이었고! SpringBoot 3.0으로 넘어오면서 의존성 주입을 잘못받았는지 or 버전이 안맞았는지 → 아니었음 리플렉션으로 생성자가 만들어지는 것 같은데, Getter나 Setter 기반으로 설정하는건가..? → 내가 쓴건 @QueryProjection 이나 Projections.constuctor였으므로 아니었음. 결론부터 말하자면, 생성자에 써둔 private 접근제어자 때문이었다. QueryDsl의 Projection 관련 코드는 생성자에 getConstructor로만 접근한다. 해당 메서드로는 private 생성자를 가져올 수 없다. 참고로, private 생성자는.. 2022. 12. 25.
상속 관련 QueryDSL 삽질 기록 상황 1 : 위와 같은 상속 관계를 가진 상황에서, BaseEntity는 “생성 시간”필드와 “수정 시간”필드를 가지고 있다. public Page pagedPosts(Pageable pageable) { List postResponses = queryFactory.select(post) .from(post) .orderBy(post.id.desc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); JPAQuery countQuery = queryFactory.select(post.count()) .from(post); return PageableExecutionUtils.getPage(postResponses, pageab.. 2022. 12. 23.