기록장 조회 API 플로우 분석

성능 테스트 및 병목 구간 발견 (Before)

[테스트 환경]

[1차 부하 테스트 결과]

조회 시나리오 평균 응답 시간 최대 응답 시간 비고
최신순 (그룹) 약 6.7s 7.1s 정렬 조건 존재
댓글순 (그룹) 약 9.7s 10.2s 인덱스 미설정
좋아요순 (그룹) 약 9.4s 10.6s 인덱스 미설정
내 기록 조회 약 3.0s 4.0s -

잘못잡은 cursor 키

댓글순이나 좋아요순은 인덱스가 없어 느린 것이 당연했지만, PK를 사용하는 최신순 정렬이 7초나 걸리는 점은 의문이었습니다. 원인은 Querydsl의 정렬 로직에 있었습니다.

[기존 코드의 문제점]

case CREATED_AT -> {
    LocalDateTime createdAt = cursor.getLocalDateTime(0);
    Long postId = cursor.getLong(1);
    builder.and(post.createdAt.lt(createdAt)
            .or(post.createdAt.eq(createdAt).and(post.postId.lt(postId))));
}

createdAtpostId를 복합 정렬 조건으로 사용하고 있었습니다. 하지만 우리 시스템은 AUTO_INCREMENT 전략을 사용하므로, postId가 클수록 최신 데이터임이 보장됩니다. 즉, createdAt 정렬은 불필요한 비용을 발생시키고 있었습니다.

[개선 코드]

case CREATED_AT -> {
					Long postId = cursor.getLong(0);
          builder.and(post.postId.lt(postId));
}