지난 글을 봤다면 키오스쿨에 dev 서버가 생겼다는 것은 알 수 있을 것이다!

서버리스로 이전하는 과정 자체가 워낙 힘들었었고, 또한 그 때 당시에는 cold start 문제로 인해서 초반에 cpu를 사용하면서 warm up 하는 과정에서 느린 응답들이 있다고 판단했어서, 응답시간이 조금 느린 것에 대해서는 크게 신경쓰지 않고 있었다.

문제가 무엇인가.

하지만 최근 들어서 실시간 주문 조회에서 order product의 served count를 변경하는 api 요청 응답시간이 5번에 1번씩 튀는 상황이 있었다.

image.png

키오스쿨은 500ms가 넘어가는 순간부터 로딩 애니메이션을 보여주게 되어있다보니, 사용자에게 굉장히 좋지 않은 ux를 가져다 주는 상황에 놓인 상황이었다.

로컬에서는 평균적으로 튀는 현상없이 10ms를 뽑아주는 api다 보니 문제가 있다고 판단했다.

이를 해결하기 위해서 일단 어디가 느린지 찾아봐야 했다.

원인 파악

일단 첫번째로 시도한 건 로직상 느릴 수 있는 부분이 있는 것인지 확인해봤다.

내가 직접 확인했을 때는 잘 몰랐는데, ai에게 점검을 시키니 n + 1문제를 찾아줬다.

현재 lazy loading으로 Order → OrderProduct 로 연결되어있는 상황인데, 이 때 n + 1문제로 인해서 느려지고 있는 부분이 있었다.

이건 @EntityGraph(attributePaths = ["orderProducts", "orderSession"]) 를 사용해서 해결했다.

그 다음 부터는 대체 어디서 어떻게 느린건지 찾기가 힘들었다…

그래서 APM인 gcp cloud trace를 붙였다!