August 23, 2023, POST - /quotation/similar vus 10, duration 10s

서비스 단에서 어떤 캐싱이 가능할 지?
유사 견적 쿼리의 로직
- 트림에 해당하는 견적 정보 쿼리
- 각 견적에 대해서
- 견적 정보에 속하는 모든 옵션/패키지에 대해서 해시태그 정보 쿼리
- 해시태그 유사도 계산
- PriorityQueue에 집어넣음
- 가장 위의 네 개의 견적을 DTO로 변환해서 반환
어떻게 캐싱할 것인가!!!
- Service의 해당 로직을 통째로 캐싱할 수 없다. 인자로 받는 정보가 variable하기 때문이다. 다만 해당 로직에 수반되는 비교적 원자적이면서 자주 반복되는 쿼리들을 캐싱하는 방식을 적용해볼 수 있겠다. → 옵션이 가지고 있는 해시태그 정보는 쉽게 바뀌지 않고 단순히 반복적으로 읽어오는 작업이기 때문이다. 쿼리 캐싱에 있어서는 mybatis의 자체적인 캐싱을 이용했다.
- API 캐싱은 대부분의 단순 Read 역할만을 하는 경우에 redis로 적용했다.
- 캐싱을 고려하다보니까 쿼리를 조금 더 일반적으로 짰다면 좋았을 것 같다는 생각이 든다. 같은 option에 대한 쿼리도 유즈케이스에 맞춰 여러 종류로 만들었는데, 이것을 더 추상화한 뒤에 그 윗단계에서 manipulate하는 방식이었다면 캐싱을 더 활용할 수 있었을 것
API 캐싱 이전의 API 성능
로컬
VUs 50, duration 60s
캐싱 x
캐싱

EC2
VUs 50, duration 60s
캐싱 x


캐싱
