HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
[New] 타일러팀
[New] 타일러팀
/
코코아 헤어샵
코코아 헤어샵
/
🧬
성능 테스트
/
🌋
트래픽 부하 테스트
/
〽️
성능테스트 결과
/
성능테스트 (정적) Refactoring

성능테스트 (정적) Refactoring

(1 차)
notion image
300/60/70
(2 차)
notion image

1. 리펙토링

notion image
수정 후
notion image
수정 전
notion image

2. 리펙토링 (쿼리 튜닝)

date, reserved Column 인덱싱
notion image
 
Spring-Data-JPA [6] Index 적용하기
Database의 성능을 높이기 위한 여러 가지 방법들이 있습니다.(Index, 반정 규화, 클러스터링 등등) 이번에는 Index에 대해서 알아보겠습니다. Index란 추가적인 작업들을 통해서 테이블에서 데이터의 조회 속도를 향상시켜줄 수 있는 자료구조입니다. (시켜줄 수도 있다는 것은 Index를 잘못 사용했을 때 생기는 문제점입니다.) 말 그대로 Index는 색인입니다. 책이나 잡지를 볼 때 원하는 내용을 찾을 때 모든 페이지를 살펴본다면 오랜 시간이 소요됩니다.
Spring-Data-JPA [6] Index 적용하기
https://dingdingmin-back-end-developer.tistory.com/entry/Spring-Data-JPA-6-Index-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
Spring-Data-JPA [6] Index 적용하기
@Query("select distinct d from Designer d join fetch d.reservationTimes r " + "where d.hairshop.id = :hairshopId ") List<Designer> findDesignerFetchJoinByHairshopId(@Param("hairshopId") Long hairshopId);
@Override public List<ReservationTimeResponseDto> getReservationTimeList(Long hairShopId, LocalDate date) { List<Designer> designers = designerRepository.findDesignerFetchJoinByHairshopId(hairShopId); for (Designer designer : designers) { List<ReservationTime> filterReservationTimes = new ArrayList<>(); List<ReservationTime> reservationTimes = designer.getReservationTimes(); for (ReservationTime reservationTime : reservationTimes) { if (reservationTime.getDate().equals(date) && reservationTime.getReserved().equals(false)) { filterReservationTimes.add(reservationTime); } } designer.changeReservationTimes(filterReservationTimes); } return designers.stream() .map(designer -> reservationConverter1.toReservationTimeResponseDto(designer)) .collect(Collectors.toList()); }
@Query("select distinct d from Designer d join fetch d.reservationTimes r " + "where d.hairshop.id = :hairshopId and r.date = :date and r.reserved = false") List<Designer> findDesignerFetchJoinByHairshopIdAndDate(@Param("hairshopId") Long hairshopId, @Param("date") LocalDate date);
@Entity @Table(name = "reservation_time", indexes = @Index(name = "i_reservationTime", columnList = "date")) @Getter @NoArgsConstructor public class ReservationTime {