[콘서트 예약 서비스] - 인덱스 (다시) 테스트

Kyungmin·2024년 12월 1일
1

Spring

목록 보기
39/39
post-thumbnail

10주 동안 [콘서트 예약 서비스] 를 진행하면서 배운 점도 많았지만, 아쉬웠던 점도 많았기에

앞으로의 [콘서트 예약 서비스] 포스팅은 새로운 것을 도입하는 것은 잠시 보류하고 그동안 진행하면서 아쉬웠던 부분의 개선, 고민해보는 시간을 가져볼까 한다.

그 첫 번째 대상은 [콘서트 예약 서비스] - 인덱스 적용 작성 당시 테스트에 익숙치 않아 아쉬웠다는 짧은 회고를 했었다.

때문에 다시 테스트를 진행해보고 인덱스를 적용하였을 때 어떤 유의미한 결과를 얻을 수 있을지 확인해보고자 한다.

💡 다시 인덱스를 적용해보자

저번 인덱스 관련 포스팅에서는 좌석 조회 시 인덱스를 적용시켰다. 이번에는

select * from users where point < 1000 and name = "?";

라는 쿼리를 실행시켰을 때, 조회 성능을 향상시키고 싶다. 때문에 user 테이블의 name 과 point 에 인덱스를 설정하여 결과를 확인해보자.

100만건의 유저 데이터를 만들고 특정 유저를 찾아보았을 때 어떤 결과가 나올까?
.
.

✍️ 인덱스 설정 x

@Table(name = "users")
public class User { ... }

✏️ 실행 결과 (프로파일링을 통해 쿼리 실행 시간 분석)


보이는 것과 같이 쿼리 실행 시간이 0.2 ms 가 나왔다.
.
.

✍️ 인덱스 설정 O

@Table(
        name = "users",
        indexes = {
                @Index(name = "idx_point", columnList = "point"),
                @Index(name = "idx_name", columnList = "name")
        }
)
public class User { ... }

✏️ 실행 결과


인덱스를 적용하였을 때 실행시간은 0.002 ms 가 나왔다.

✅ 확인 결과 0.2ms에서 0.002ms 성능은 약 100배 향상된 것을 볼 수 있었다.

.
.
.

회고

간단하지만 인덱스를 적용해보고 느낀점은 작은 최적화도 큰 차이를 만든다는 것이다.
필요한 곳에 인덱스를 적절히 사용하고 조회 속도를 개선하여 사용자 경험을 높일 수 있을 것이다.

자주 실행되는 쿼리나 반복 작업의 병목을 찾아내는 것이 개발자의 중요한 역할이라고 생각한다.

미세한 성능 개선이라도 대규모 트래픽 환경에서는 큰 절감 효과를 가져올 수 있다는 점을 기억하자.

profile
Backend Developer

0개의 댓글

관련 채용 정보