전체 글 (34) 썸네일형 리스트형 [성능 개선] 데이터베이스로 날라가는 쿼리의 수를 줄여보자 버전ngrinder 3.5.8mysql 8.0.35 쿼리 줄이기N+1 문제JPA를 사용하면서 Fetch 전략을 기본적으로 LAZY 전략을 사용했는데 이때 N+1 문제가 발생할 수 있다.N+1 문제란 1번의 쿼리를 날렸을 때 의도치 않은 N번의 쿼리가 추가적으로 발생하는 문제로LAZY 전략을 사용해서 엔티티를 가져온 후 일대다 연관관계를 가진 하위 엔티티를 조회할 경우 발생할 수 있다. 해결방법으로 fetch join을 사용할 수 있다.하지만 페이징을 사용할 경우 데이터베이스로 날아가는 쿼리에는 limit과 offset이 없는데이는 select 한 데이터들을 메모리에 저장하고 애플리케이션 레벨에서 정렬하기 때문인데 부하가 많이 걸린다. 다른 해결방법으로는 batch size를 사용할 수 있다.엔티티를 가.. [성능 개선] 인덱스를 사용해보자 버전mysql 8.0.35ngrinder 3.5.8 인덱스인덱스는 조회를 빠르게 해주는 자료구조이다.인덱스를 사용해서 쿼리속도를 개선하기 위해서API 마다 발생하는 쿼리를 기록하고 EXPLAIN을 사용해서 쿼리의 실행계획을 통해 개선할 부분이 없는지 고민했다. 유저인덱스 사용하기기존에는 이메일 중복여부를 확인하기 위해 다음과 같은 쿼리를 사용했다.email은 중복이 되지 않아야 하므로 unique 제약조건을 달았고 기본적으로 논클러스터드 인덱스가 걸린다.where 절에서 email을 사용하기 때문에 Index Unique Scan을 사용해서 탐색한다.select user0_.users_id as users_id1_6_, user0_.created_time as created_2_6_, .. [문제 해결] 역직렬화 과정에서 발생하는 문제를 해결해보자 문제아래와 같은 객체를 리스트로 redis에 저장하면서키를 직렬화할 때는 StringRedisSerializer를 사용하고값을 직렬화할 때는 GenericJackson2JsonRedisSerializer를 사용했다.@Getter@AllArgsConstructor@NoArgsConstructorpublic class GetMemoDto { private Long id; private String profileImg; private String memoItem; private String memoColor; private LocalDateTime createdTime; private Double xPosition; private Double yPosition; pr.. 이전 1 ··· 8 9 10 11 12 다음