OTA 플랫폼의 호스트 서비스에서 할인 정책이 적용된 각각의 가격을 달력에 띄우기 위한 작업을 진행하고 있었습니다.
플랫폼에서는 예약 일자를 기반으로 여러 조건을 검사하여 최종 가격을 띄우는데 호스트 서비스에서는 달력에 순수한 가격만을 띄우고 있어 정책이 적용된 가격을 띄우는 것이 작업의 목표였습니다.
기존의 로직을 사용하기 위해서는 매일을 예약 일자로 잡아 계산을 해야 합니다. 그렇게 된다면 한 달 안의 모든 일자에 대해 계산을 적용하게 되는데 이를 통해 순수한 가격을 불러올 때 보다 3배까지의 시간이 걸리게 된 것입니다.
조건을 검사하고 계산하는 코드가 반복문을 여러 번 돌면서 불필요하게 생기는 쿼리가 성능 저하의 주된 이슈였습니다.
달력에 가격을 렌더링 할 때 0.78초가 걸렸습니다. 1차 작업 후 모든 날짜에 대해 service를 호출할 때는 7.35초가 걸렸고 위의 개선 과정 후에는 0.08초로 렌더링 시간을 단축 시킬 수 있었습니다. 최종적으로 기존의 시간에 비해 10배, 1차로 한 작업에 비해 100배의 시간을 단축한 결과를 낼 수 있게 되었습니다.
프론트엔드 작업 뿐 아니라 백엔드 작업도 맡으며 성능에 대한 고민, 쿼리에 대한 고민을 깊게 할 수 있었어서 뜻 깊은 작업이었습니다. Eager load , Preload 에 대해서도 접하게 되어 이를 사용한 리팩토링도 진행해 보려고 합니다.