개요 기존에 20초 이상 걸리는 보고서 쿼리가 있었다. 해당 쿼리는 스프링 어플리케이션에서 native 쿼리를 사용하여 원시 통계 테이블을 조회한 후 보고서 형식에 맞게 반환해주는 코드였다. admin 페이지 특성 상 B to C 프로덕트 보다는 성능 이슈가 덜하지만 개선할 수 있는 여지가 있어 이를 개선하였다. 내용 내가 생각하는 가장 큰 원인은 두 가지였다. 첫번째는 원시 통계 테이블을 그대로 조회한다는 것이었고, 두번째는 계층 구조의 이점을 살리지 못한다는 것이 그것이다. 기존의 구조, 원시 통계 테이블 참조 원시 통계 테이블을 참조했을 때 발생하는 가장 큰 이슈는 쿼리를 날렸을 때 스캔해야 할 row 수가 너무 많다는 것이다.(조회 기준이 따라 다르지만 수천만 ~ 수억건이 될 수 있다) 이렇게 ..
airflow
상황Airflow를 이용해서 low한 통계 데이터를 집계하는 API를 호출하여 daily 과금 금액과 total 과금 금액을 집계한다. 이때 과금 금액을 "사용한 값" 이라고 하자. "사용한 값"은 00시에 0으로 리셋해준다. "사용할 값"은 하루에 총 소진되어야 할 시간 * 스케줄(06시 ~ 12시에만 소진되어야 하는 등의 설정이 가능하다) 그런데 리셋을 해주었음에도 불구하고 "사용할 값"이 갑자기 치솟아 과소진 된 이슈가 있었다. 원인쿼리의 구성은 이랬다. - 원시 통계 데이터를 가지고 1차 가공 디비에 업데이트 (따라서 시간이 오래 걸리고, Replace Into와 셀렉트 절을 사용한다)REPLACE INTO 1차 가공 테이블 (date, 통계 데이터) SELECT date, 식별자, 통계에 필요한..