[DATADOG] API가 너무 느린데 이유를 모르겠다?

가영·2021년 11월 10일
3

로지성장일기

목록 보기
1/3

문제상황

내가 만든 API가 너무 느려서 골머리를 앓고 있었다. 데이터를 단순 조회하는 API인데도 느린 것이, 무언가 문제가 있다 생각했다.

작성한 글의 내용과 썸네일 같은 데이터베이스에서 읽어오기만 하면 되는 정보도 있었고, 사용자의 역할/권한 또는 상황에 따라 값을 다르게 정해주는 과정이 있었다. (그리고, 나중에 자각했지만 기존 유저정보 관리 서버에 API를 날리기도 했다)

나는 이때, DB에서 데이터를 조회해서 클라이언트가 원하는 데이터를 가공하는 개발 과정 직후에 이 문제를 마주했기 때문에
내가 쿼리를 많이 날리거나 슬로우 쿼리를 작성해서 이런 오랜 시간이 걸리는 것이라고 생각했다. (근데 아니었음)

멘토님과 이야기를 할수록 이상하다는 느낌이 커졌었다.

인덱싱?

처음에는 인덱스 문제라고 생각했었고, 그래서 내가 자주 조회하는 테이블과 where 절에 들어가는 필드들에 인덱스를 걸어주었었다. (JPA @Index 사용)
멘토님이 인덱스가 잘 타고 있는지 SQL explain 구문으로 확인도 해주셨었다.

잘 타고 있었다.

DB 문제라고 하기엔 말이 안되는 시간이라고 말씀을 하셨고, 그래서
데이터독을 보고 어디에 문제가 있는지 확인해보자고 하셨다.

멘토님께서는
1. 데이터독 pc에 설치
2. 프로젝트에 agent 넣어주기
3. (for span customizing) 필요한 디펜던시 설치
를 비롯해 어떻게 데이터독을 사용하는지 보여주셨다.

API가 느렸던 진짜 원인

로컬에서 돌릴 때 에이전트를 실행해주고 데이터독을 활성화해준 뒤,
로컬로 api를 날려봤다. 조금만 기다리니 데이터독 Open Web UI 대시보드(?)에서 확인해 볼 수 있었다.

저기 파란색이 mysql 연산이다.

그렇다. 범인은 mysql(데이터베이스 연산)이 아니라
그 옆에있는 okhttp 였다.. okhttp는,

나는 third app을 개발 중이라 회사 내부 유저 정보 서버에 rpc로 통신할 수 없어서 rest로 요청을 보내고 응답값으로 내 API 응답값들을 만들곤 했는데 이 때 외부 API를 너무 많이 호출해서 API가 느려진 것이었다 ^^.,,

이제 해야할 일

bulk read API 로 전환하기 가 우선이다. (외부에서 정보를 한번에 가져오도록)

  • datadog 더 알아보기
  • 인덱싱 원리 다시 파악하기

거의 일기같은 느낌인데 이렇게라도 적지 않으면 까먹을 것 같다.
요즘 배우는 건 엄청 많은데 정리하지 못해 아쉬운 것들이 많다. 이제라도, 시간을 내서 내 언어로 다시 적어주고 회상하는 시간을 꼭 가지려고 한다!

0개의 댓글