경험 중심 1인칭 답변
Dropwizard 기반 API 서비스에서 병목을 찾을 때 먼저 메트릭 레이어를 확인합니다. JVM 힙 사용량, GC 빈도, 스레드 풀 포화도, DB 커넥션 풀 대기 시간을 보면 병목이 어느 계층에 있는지 빠르게 줄여집니다. 인턴 때 느린 API 엔드포인트를 분석한 적이 있는데, 스레드 덤프를 찍었더니 DB 쿼리 대기로 스레드가 묶혀 있는 패턴이 보였습니다. EXPLAIN 분석으로 N+1 쿼리가 발생하고 있는 것을 확인했고, JOIN으로 병합해 쿼리 수를 1/8로 줄였더니 p99 응답 시간이 1200ms → 180ms로 개선됐습니다. 또한 자주 조회되는 데이터에 캐시 레이어를 추가하면서 DB 커넥션 경합도 줄었습니다. Dropwizard는 metrics-core가 내장되어 있어서 엔드포인트별 응답 시간 히스토그램을 코드 수정 없이 볼 수 있다는 점이 병목 진단에 유리했습니다.
병목은 느낌으로 찾는 것이 아니라 측정으로 찾아야 한다는 것이 그때 배운 원칙입니다.