728x90

JAVA 103

리팩토링: 쿼리 줄이기

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

스프링부트 스케줄링 적용 @EnableScheduling

리뷰가 생성 될 때 마다 즉각적으로 평점 갱신했던 것을 스케줄링을 통해 매일 자정에 하는 것으로 변경 변경 전 :@Transactionalpublic ReviewResponse createReview(Long memberId, Long accommodationId, ReviewRequest reviewRequest) { Accommodation accommodation = findAccommodation(accommodationId); Member member = findMember(memberId); Reservation reservation = findReservation(reviewRequest.getReservationId()); Long productId = reser..

JAVA/프로젝트 2024.07.16

카카오맵 Rest API - 주소로 위도, 경도 반환하기

https://developers.kakao.com/docs/latest/ko/local/dev-guide#address-coord Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com yml 파일에 추가kakao: rest: api: key: ${KAKAO_REST_API_KEY} 환경변수에 키 값을 추가한다 반환하는 로직@Slf4j@Service@RequiredArgsConstructorpublic class KakaoMapService { private final RestTemplate restTemplate; privat..

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