728x90

2024/09 5

리팩토링: 쿼리 줄이기

property 의 존재 유무만 확인하면 되는데default Property getById(Long propertyId) { return findById(propertyId) .orElseThrow(() -> new EntityNotFoundException(ErrorCode.NOT_FOUND)); }property의 모든 필드를 조회하는 것은 과하다고 생각이 되었다.  property의 id는  @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;auto increment설정이 되어 있어 자동으로 부여된다. 즉, id가 있으면 property 는 존재 property의 i..

JAVA/프로젝트 2024.09.12

리팩토링: 레디스 캐시 기능과 스케줄러를 통한 캐시 무효화

멘토님의 답변에 따라 리스트 조회에 캐시 기능을 추가@Cacheable(value = "sidebarList", keyGenerator = "keyGenerator") @Transactional(readOnly = true) public SideBarListResponse getSideBarList(Long propertyId) { LocalDate today = LocalDate.now(); Pageable pageable = PageRequest.of(0, 20); List sideBarPendingResponse = getPendingPropertiesDto(today, pageable); List complet..

JAVA/프로젝트 2024.09.12

리팩토링: DB 접근을 최소화하고 메모리에서 연산을 수행해 쿼리 감소

lms라면 false 를 반환하고, 그 외이면 true 를 반환하는 메서드를 작성했다 변경전: @Query("SELECT CASE " + "WHEN :medium = 'LMS' THEN false " + "ELSE true " + "END") boolean checkExtraConsultation(@Param("medium") String medium);db에 접근해 lms인지 아닌지 연산을 수행한다. 변경 후: default boolean checkExtraConsultation(String medium) { return !"LMS".equals(medium);db상호작용이 없고,  메모리 내에서 문자열을 비교해 결과를 반환한다. db접근이 줄어 성능적으로 더 좋고, 쿼리문도 약 50..

JAVA/프로젝트 2024.09.03

리팩토링: DTO를 사용한 쿼리 최적화

날짜만을 조회하는데 property 안 모든 필드를 조회하고 있어 쿼리문이 과하게 생기는 문제가 발생했다.이를 줄여보기 위해 repository 에 dto를 사용해봤다. 현재 내가 사용하는 것들만 담아 dto를 제작@Getter@NoArgsConstructor@AllArgsConstructor@Builderpublic class PropertyDateDto { private Long id; private String name; private LocalDate endDate; private LocalDate startDate;}  레포지토리 적용전: property 객체 전체를 사용하고 있다.  @Query( "SELECT p FROM Property p WHERE..

JAVA/프로젝트 2024.09.03
728x90
반응형