10주 동안 [콘서트 예약 서비스] 를 진행하면서 배운 점도 많았지만, 아쉬웠던 점도 많았기에
앞으로의 [콘서트 예약 서비스] 포스팅은 새로운 것을 도입하는 것은 잠시 보류하고 그동안 진행하면서 아쉬웠던 부분의 개선, 고민해보는 시간을 가져볼까 한다.
그 첫 번째 대상은 [콘서트 예약 서비스] - 인덱스 적용 작성 당시 테스트에 익숙치 않아 아쉬웠다는 짧은 회고를 했었다.
때문에 다시 테스트를 진행해보고 인덱스를 적용하였을 때 어떤 유의미한 결과를 얻을 수 있을지 확인해보고자 한다.
저번 인덱스 관련 포스팅에서는 좌석 조회 시 인덱스를 적용시켰다. 이번에는
select * from users where point < 1000 and name = "?";
라는 쿼리를 실행시켰을 때, 조회 성능을 향상시키고 싶다. 때문에 user 테이블의 name 과 point 에 인덱스를 설정하여 결과를 확인해보자.
100만건의 유저 데이터를 만들고 특정 유저를 찾아보았을 때 어떤 결과가 나올까?
.
.
@Table(name = "users")
public class User { ... }
보이는 것과 같이 쿼리 실행 시간이 0.2 ms 가 나왔다.
.
.
@Table(
name = "users",
indexes = {
@Index(name = "idx_point", columnList = "point"),
@Index(name = "idx_name", columnList = "name")
}
)
public class User { ... }
인덱스를 적용하였을 때 실행시간은 0.002 ms 가 나왔다.
.
.
.
간단하지만 인덱스를 적용해보고 느낀점은 작은 최적화도 큰 차이를 만든다는 것이다.
필요한 곳에 인덱스를 적절히 사용하고 조회 속도를 개선하여 사용자 경험을 높일 수 있을 것이다.
자주 실행되는 쿼리나 반복 작업의 병목을 찾아내는 것이 개발자의 중요한 역할이라고 생각한다.
미세한 성능 개선이라도 대규모 트래픽 환경에서는 큰 절감 효과를 가져올 수 있다는 점을 기억하자.